C# 如果数据模板中的文本框获得焦点,则自动选择TreeViewItem(不使用代码)
我有一个两级的树视图。 二级树视图项通过数据模板包含文本框控件 我想要的是:如果TextBox控件获得焦点,则选择相应的TreeViewItem。 我做了一些研究,发现:C# 如果数据模板中的文本框获得焦点,则自动选择TreeViewItem(不使用代码),c#,wpf,xaml,triggers,treeview,C#,Wpf,Xaml,Triggers,Treeview,我有一个两级的树视图。 二级树视图项通过数据模板包含文本框控件 我想要的是:如果TextBox控件获得焦点,则选择相应的TreeViewItem。 我做了一些研究,发现: <Style TargetType="ListViewItem"> <Style.Triggers> <Trigger Property="IsKeyboardFocusWithin" Value="true"> <Setter Property="IsSele
<Style TargetType="ListViewItem">
<Style.Triggers>
<Trigger Property="IsKeyboardFocusWithin" Value="true">
<Setter Property="IsSelected" Value="true" />
</Trigger>
</Style.Triggers>
如果我用TreeViewItem替换ListViewItem,这几乎可以完美实现
但是:第一个子项总是选择其父项而不是其自身。
(其他子项按预期工作)
所以就像
<TreeView>
<TreeViewItem>
<TreeViewItem> <-- this doesn't work
<TreeViewItem> <-- this works
</TreeViewItem>
<TreeViewItem>
<TreeViewItem> <-- this doesn't work
<TreeViewItem> <-- this works
<TreeViewItem> <-- this works
</TreeViewItem>
<TreeViewItem>
<TreeViewItem> <-- this doesn't work
<TreeViewItem> <-- this works
<TreeViewItem> <-- this works
</TreeViewItem>
...
</TreeView>
我找到了解决办法。事实证明,这个问题是由应用于1级TreeViewItems的样式引起的(它们只包含一个TextBlock)。因此,如果我将样式更改为
<Style TargetType="{x:Type TreeViewItem}">
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsKeyboardFocusWithin" Value="True"></Condition>
<Condition Property="HasItems" Value="False"></Condition>
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="IsSelected" Value="True"></Setter>
</MultiTrigger.Setters>
</MultiTrigger>
</Style.Triggers>
</Style>
并将此样式设置为
,一切都可以按需工作