我有一个2级TreeView。 Level-2 TreeViewItems通过数据模板包含TextBox控件。
我想要的是:如果TextBox控件获得焦点,则选择相应的TreeViewItem。 我做了一些研究,发现了这个:
<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>
任何想法我做错了什么或如何解决这个问题?
答案 0 :(得分:3)
我找到了解决方案。事实证明,问题是由应用于level-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>
并将此样式设置为<TreeView.ItemContainerStyle>
,一切都按预期工作。