У меня довольно забавная проблема с WPF. У меня есть древовидное представление, и пока выбор элементов работает нормально. Проблема в том, что я хочу отменить выбор текущего выбранного элемента, когда пользователь щелкает внутри пустой области древовидной структуры. По умолчанию древовидная структура сохраняет выбранный текущий элемент, и я добавил опцию контекстного меню, чтобы отменить ее выбор, что довольно сложно:
// Note: This is done recursivly from the start, so it
// works for child items as well
treeView.ItemContainerGenerator.ContainerFromItem(treeView.SelectedItem) as TreeViewItem).IsSelected = false;
Более того, это нелогично, так как от пользователя требуется сначала щелкнуть правой кнопкой мыши, а затем, после отмены выбора таким способом, пользователь больше не может выбирать его, щелкая элемент. Как это должно работать?
Редактировать: Еще немного информации: я добавил обработчик в TreeView
для обработки событий щелчка мыши, но отправитель всегда является экземпляром TreeView
, даже если я щелкаю непосредственно по TreeViewItem
. Если вместо этого я добавлю обработчик к своему TreeView.ItemTemplate
(то есть к первому дочернему элементу в шаблоне), я никогда не получу события, когда нажимаю на пустую область (что довольно логично). Код выглядит так:
private void MyTreeView_MouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
if ((sender as TreeViewItem) == null)
{
// Always triggered
System.Diagnostics.Trace.Write("Empty area clicked");
}
}
И XAML для этого:
<TreeView x:Name="MyTreeView" Margin="3" MouseUp="MyTreeView_MouseUp">