2

我有一个 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>

任何想法我做错了什么或如何解决这个问题?

4

1 回答 1

3

我找到了解决方案。事实证明,问题是由应用到 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>,一切都按预期工作。

于 2012-07-06T08:02:05.410 回答