2

2レベルのTreeViewがあります。レベル2TreeViewItemsには、データテンプレートを介したTextBoxコントロールが含まれています。

必要なもの:TextBoxコントロールがフォーカスを取得すると、それぞれのTreeViewItemが選択されます。私はいくつかの調査を行い、これを見つけました:

<Style TargetType="ListViewItem">
<Style.Triggers>
    <Trigger Property="IsKeyboardFocusWithin" Value="true">
        <Setter Property="IsSelected" Value="true" />
    </Trigger>
</Style.Triggers>

リンク

ListViewItemをTreeViewItemに置き換えると、これはほぼ完全に機能します。

ただし、最初の子アイテムは、それ自体ではなく常に親アイテムを選択します。(他の子アイテムは期待どおりに機能します)。

だからそれは

<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 が 1 つしか含まれていません)。したがって、スタイルを次のように変更すると

            <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 に答える