我和他有同样的问题
TreeView
不久前的控制。。。以下是我如何解决这个问题的:
private void TreeViewItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
// skip mouse clicks on the expander button
if (e.Source is ToggleButton)
return;
// find the original source's parent TreeViewItem
DependencyObject originalSource = e.OriginalSource as DependencyObject;
while (originalSource != null)
{
TreeViewItem tvi = originalSource as TreeViewItem;
if (tvi != null)
{
IListItem listItem = tvi.Header as IListItem;
if (listItem != null)
{
if (Keyboard.Modifiers == ModifierKeys.Shift)
ViewModel.MultiSelectTo(listItem);
else if (Keyboard.Modifiers == ModifierKeys.Control)
ViewModel.ToggleSelection(listItem);
else
ViewModel.Select(listItem);
}
// the TreeViewItem is never truly selected... when selected, we manually change it's background color (see xaml)
tvi.IsSelected = false;
e.Handled = true;
break;
}
originalSource = VisualTreeHelper.GetParent(originalSource);
}
}
XAML:
<Style.Triggers>
<DataTrigger Binding="{Binding Selected}" Value="True">
<Setter Property="Background" Value="#FF3399FF" />
</DataTrigger>
</Style.Triggers>
IListItem
接口是我的数据对象实现的接口,以便显示在我的
.
ViewModel
财产是我的观点
DataContext
树景
控制自己来处理它。