C# 为什么左键单击使用DataTemplate创建的TreeViewItem时不选择它们?
我曾尝试使用下面的选项在C# 为什么左键单击使用DataTemplate创建的TreeViewItem时不选择它们?,c#,wpf,xaml,datatemplate,treeviewitem,C#,Wpf,Xaml,Datatemplate,Treeviewitem,我曾尝试使用下面的选项在TreeView中取消选择TreeViewItems,但它只会取消选择TreeViewItems,如果它们是在XAML中静态设置的,如果它们是使用ItemsSource和DataTemplate创建的,则当您设置ItemSource时,SelectedItem对应于您设置的ItemSource集合的DataContext类型,而不是实际的treevieItem 所以你的演员阵容失败了 现在,当您直接在xaml中创建它们而不设置ItemSource时,SelectedIte
TreeView
中取消选择TreeViewItems
,但它只会取消选择TreeViewItems
,如果它们是在XAML中静态设置的,如果它们是使用ItemsSource
和DataTemplate
创建的,则当您设置ItemSource
时,SelectedItem
对应于您设置的ItemSource
集合的DataContext
类型,而不是实际的treevieItem
所以你的演员阵容失败了
现在,当您直接在xaml中创建它们而不设置ItemSource
时,SelectedItem
只是treevieItem
本身,而as
强制转换工作正常
更新:
它与您的DataTemplate
试试这个:
TreeViewItem selectedItem = MyTreeView.SelectedItem as TreeViewItem;
if(selectedItem != null) {
selectedItem.IsSelected = false;
MyTreeView.Focus();
}
现在,当应用程序运行时,单击一个项目,然后单击按钮
检查输出窗口,您将看到
private void ButtonBase_OnClick(object sender, RoutedEventArgs e) {
TreeViewItem selectedItem = MyTreeView.SelectedItem as TreeViewItem;
if (selectedItem != null) {
selectedItem.IsSelected = false;
MyTreeView.Focus();
} else {
Debug.WriteLine("Not TreeViewitem");
Debug.WriteLine(MyTreeView.SelectedItem);
}
}
DataTemplate
仅帮助在视图中可视化自定义数据类型。当集合绑定到TreeView
解决方案:
在您的情况下,要获取实际的TreeViewItem
请尝试:
Not TreeViewitem
Hello
^^这可能不适用于
HierarchycalDataTemplate
。有关更多选项,请参阅。您是否真的打算对固定设备的treevieItem
模板执行一些特殊操作(这需要更改treevieItem
模板
从表面上看,您似乎可以让TreeView
处理自己的项目,只需使用一个简单的模板来表示对象:例如
private void ButtonBase_OnClick(object sender, RoutedEventArgs e) {
TreeViewItem selectedItem =
MyTreeView.ItemContainerGenerator.ContainerFromItem(MyTreeView.SelectedItem) as TreeViewItem;
if (selectedItem == null)
return;
selectedItem.IsSelected = false;
MyTreeView.Focus();
}
我可能误解了你想要达到的目的。但我使用
数据模板
为T
@Bob类型创建了一个树项目
。这与你的数据模板
无关。请检查我对答案的更新。@Bob。对于你的要求,我在我的答案底部添加了一个解决方案。试试看是否at对你有用。嗯……我想我需要创建一个treevieItem
对象进入treevieItem.Items
或者它不会被这样对待,但这对我有用。我相信,因为TreeView
继承自ItemsControl
,它会自动将它的所有项包装在适当的c中容器(TreeViewItem
)。我想在模板中放入另一个TreeViewItem
,这意味着它被包装了两次,事情变得有点混乱。
Not TreeViewitem
Hello
private void ButtonBase_OnClick(object sender, RoutedEventArgs e) {
TreeViewItem selectedItem =
MyTreeView.ItemContainerGenerator.ContainerFromItem(MyTreeView.SelectedItem) as TreeViewItem;
if (selectedItem == null)
return;
selectedItem.IsSelected = false;
MyTreeView.Focus();
}
<DataTemplate DataType="{x:Type EntityType:MyFixedDevice}">
<TextBlock Text="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource NameConverter}}" />
</DataTemplate>