gpt4 book ai didi

c# - 如果数据模板中的文本框获得焦点(不使用代码),则自动选择 TreeViewItem

转载 作者:行者123 更新时间:2023-11-30 22:27:18 25 4
gpt4 key购买 nike

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

Link

如果我用 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>

并将此样式设置为 <TreeView.ItemContainerStyle> ,一切都按预期工作。

关于c# - 如果数据模板中的文本框获得焦点(不使用代码),则自动选择 TreeViewItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11347707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com