NavisworksTransport/src/UI/WPF/Views/AnimationControlView.xaml.cs

185 lines
6.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Windows.Controls;
using NavisworksTransport.UI.WPF.ViewModels;
namespace NavisworksTransport.UI.WPF.Views
{
/// <summary>
/// AnimationControlView.xaml 的交互逻辑
/// 检测动画页签视图,提供动画控制和碰撞检测功能
/// </summary>
public partial class AnimationControlView : UserControl
{
/// <summary>
/// 动画控制视图模型
/// </summary>
public AnimationControlViewModel ViewModel { get; private set; }
public AnimationControlView() : this(null)
{
// 调用带参数的构造函数传入null
}
/// <summary>
/// 带主ViewModel参数的构造函数支持统一状态栏
/// </summary>
/// <param name="mainViewModel">主ViewModel用于统一状态栏</param>
public AnimationControlView(LogisticsControlViewModel mainViewModel)
{
InitializeComponent();
InitializeViewModel(mainViewModel);
}
/// <summary>
/// 初始化ViewModel
/// </summary>
private void InitializeViewModel()
{
try
{
ViewModel = new AnimationControlViewModel();
DataContext = ViewModel;
LogManager.Info("AnimationControlView ViewModel初始化完成");
}
catch (Exception ex)
{
LogManager.Error($"AnimationControlView ViewModel初始化失败: {ex.Message}", ex);
throw;
}
}
/// <summary>
/// 初始化ViewModel支持统一状态栏
/// </summary>
/// <param name="mainViewModel">主ViewModel用于统一状态栏</param>
private void InitializeViewModel(LogisticsControlViewModel mainViewModel)
{
try
{
ViewModel = new AnimationControlViewModel(mainViewModel);
DataContext = ViewModel;
LogManager.Info("AnimationControlView ViewModel初始化完成 - 支持统一状态栏");
}
catch (Exception ex)
{
LogManager.Error($"AnimationControlView ViewModel初始化失败: {ex.Message}", ex);
throw;
}
}
/// <summary>
/// 清理资源
/// </summary>
public void Cleanup()
{
try
{
ViewModel?.Dispose();
LogManager.Info("AnimationControlView资源清理完成");
}
catch (Exception ex)
{
LogManager.Error($"AnimationControlView资源清理失败: {ex.Message}");
}
}
/// <summary>
/// 碰撞检测结果选择变化事件处理
/// </summary>
private void OnClashDetectiveResultSelectionChanged(object sender, SelectionChangedEventArgs e)
{
try
{
if (ViewModel == null) return;
// 获取选中的结果
var listView = sender as ListView;
if (listView?.SelectedItem is ClashDetectiveResultViewModel selectedResult)
{
ViewModel.SelectedClashDetectiveResult = selectedResult;
}
else
{
ViewModel.SelectedClashDetectiveResult = null;
}
}
catch (Exception ex)
{
LogManager.Error($"[AnimationControlView] 处理碰撞检测结果选择变化失败: {ex.Message}", ex);
}
}
/// <summary>
/// 碰撞构件选择变化事件处理 - 点选时高亮并聚焦对象
/// </summary>
private void OnCollisionObjectSelectionChanged(object sender, SelectionChangedEventArgs e)
{
try
{
if (ViewModel == null || ViewModel.SelectedClashDetectiveResult == null) return;
// 获取选中的构件
var listView = sender as ListView;
if (listView?.SelectedItem is CollisionObjectViewModel selectedObject)
{
// 触发高亮
ViewModel.SelectedClashDetectiveResult.ExecuteHighlightCollisionObject(selectedObject);
// 聚焦到对象
ViewModel.FocusOnCollisionObject(selectedObject);
}
}
catch (Exception ex)
{
LogManager.Error($"[AnimationControlView] 处理碰撞构件选择变化失败: {ex.Message}", ex);
}
}
/// <summary>
/// 排除对象列表选择变化事件处理 - 点选时高亮并聚焦单个对象
/// </summary>
private void ExcludedObjectsListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
try
{
if (ViewModel == null) return;
// 获取选中的排除对象
var listView = sender as ListView;
if (listView?.SelectedItem is ExcludedObjectViewModel selectedObject)
{
// 高亮单个对象
ViewModel.HighlightSingleExcludedObject(selectedObject);
// 聚焦到对象
ViewModel.FocusOnExcludedObject(selectedObject);
}
}
catch (Exception ex)
{
LogManager.Error($"[AnimationControlView] 处理排除对象选择变化失败: {ex.Message}", ex);
}
}
/// <summary>
/// 手工指定对象列表选择变化事件处理 - 单击时聚焦到对象
/// </summary>
private void OnManualTargetSelectionChanged(object sender, SelectionChangedEventArgs e)
{
try
{
if (ViewModel == null) return;
// 获取选中的对象
var listView = sender as ListView;
if (listView?.SelectedItem is ManualCollisionTargetViewModel selectedTarget)
{
// 聚焦到对象
ViewModel.FocusOnManualTarget(selectedTarget);
}
}
catch (Exception ex)
{
LogManager.Error($"[AnimationControlView] 处理手工指定对象选择变化失败: {ex.Message}", ex);
}
}
}
}