TreeViewItem 不会在单击 WPF 时突出显示
TreeViewItem do not get highlighted on Single click WPF
我有一个简单的树,它工作正常,但单击时没有突出显示,用户需要双击。
绑定到它的命令只需单击即可正常工作。
<TreeView ItemsSource="{Binding ElementsTypes}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate>
<TextBlock Text="{Binding Name}">
<TextBlock.InputBindings>
<MouseBinding Gesture="LeftClick"
Command="{Binding ElementsCommand}"
CommandParameter="{Binding}" />
</TextBlock.InputBindings>
</TextBlock>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
那是因为您的 MouseBinding
是 "stealing" 您的左键单击。一种可能的解决方案是将 IsSelected
属性 添加到您的 ViewModel 并将其设置为 true
on ElementsCommand
:
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</TreeView.ItemContainerStyle>
public class MyTreeElement
{
private bool _IsSelected;
public bool IsSelected
{
get { return _IsSelected; }
set
{
_IsSelected = value;
OnPropertyChanged("IsSelected");
}
}
private void ElementsCommandMethod(object item)
{
Console.WriteLine("ElementsCommand");
IsSelected = true;
}
}
这样您还将知道您的 ViewModel 中的哪个项目被选中,并且能够从 ViewModel 中以编程方式操作选择。
我有一个简单的树,它工作正常,但单击时没有突出显示,用户需要双击。
绑定到它的命令只需单击即可正常工作。
<TreeView ItemsSource="{Binding ElementsTypes}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate>
<TextBlock Text="{Binding Name}">
<TextBlock.InputBindings>
<MouseBinding Gesture="LeftClick"
Command="{Binding ElementsCommand}"
CommandParameter="{Binding}" />
</TextBlock.InputBindings>
</TextBlock>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
那是因为您的 MouseBinding
是 "stealing" 您的左键单击。一种可能的解决方案是将 IsSelected
属性 添加到您的 ViewModel 并将其设置为 true
on ElementsCommand
:
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</TreeView.ItemContainerStyle>
public class MyTreeElement
{
private bool _IsSelected;
public bool IsSelected
{
get { return _IsSelected; }
set
{
_IsSelected = value;
OnPropertyChanged("IsSelected");
}
}
private void ElementsCommandMethod(object item)
{
Console.WriteLine("ElementsCommand");
IsSelected = true;
}
}
这样您还将知道您的 ViewModel 中的哪个项目被选中,并且能够从 ViewModel 中以编程方式操作选择。