using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Media; using DTS.Common.Controls; using DTS.Common.Interface.TestSetups.TestSetupsList; using DTS.Common.Utils; // ReSharper disable CheckNamespace namespace TestSetupsList { /// /// /// Interaction logic for TestSetupsListView.xaml /// public partial class TestSetupsListView : ITestSetupsListView { public TestSetupsListView() { InitializeComponent(); } private void ListViewHeader_Click(object sender, System.Windows.RoutedEventArgs e) { var colHeader = (GridViewColumnHeader)e.OriginalSource; var viewModel = (ITestSetupsListViewModel)colHeader.DataContext; viewModel.Sort(colHeader.Tag, true); } private void GridViewColumnHeaderSearchable_OnSearch(object sender, RoutedEventArgs e) { var searchTerm = (string)e.OriginalSource; var columnTag = (sender as GridViewColumnHeaderSearchable)?.Tag; var viewModel = (ITestSetupsListViewModel)DataContext; viewModel.Filter(columnTag, searchTerm); } private void GridViewColumnHeader_OnClick(object sender, RoutedEventArgs e) { var vm = (ITestSetupsListViewModel)DataContext; var columnTag = (sender as GridViewColumnHeaderSearchable)?.Tag ?? Utils.FindChild((DependencyObject)e.OriginalSource, null)?.Tag; vm?.Sort(columnTag, true); } private void MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e) { var lv = sender as ListView; if (null == lv) { return; } var index = GetCurrentIndex(e.GetPosition, lv); if (index >= 0 && index < lv.Items.Count) { var vm = (ITestSetupsListViewModel)lv.DataContext; vm.MouseDoubleClick(index); } } delegate Point GetPositionDelegate(IInputElement element); private int GetCurrentIndex(GetPositionDelegate getPosition, ListView lv) { int index = -1; for (int i = 0; i < lv.Items.Count; i++) { ListViewItem item = GetListViewItem(i, lv); if (item == null) continue; if (IsMouseOverTarget(item, getPosition)) { index = i; break; } } return index; } private ListViewItem GetListViewItem(int index, ListView lv) { return lv.ItemContainerGenerator.ContainerFromIndex(index) as ListViewItem; } private bool IsMouseOverTarget(Visual target, GetPositionDelegate getPosition) { Rect bounds = VisualTreeHelper.GetDescendantBounds(target); Point mousePos = getPosition((IInputElement)target); return bounds.Contains(mousePos); } } }