gpt4 book ai didi

c# - 如何以编程方式将键盘焦点放在 WPF TreeViewItem 上?

转载 作者:行者123 更新时间:2023-11-30 15:08:07 24 4
gpt4 key购买 nike

我正在尝试以编程方式将键盘焦点设置到 TreeView 项(在特定条件下)。我尝试了两种设置焦点的方法,这两种方法都成功地获得了对 TreeViewItem 的焦点,但失去了键盘焦点。

TreeView 绑定(bind)到 View 模型:

<TreeView Name="solutionsModel" TreeViewItem.Selected="solutionsModel_Selected"
ItemsSource="{Binding Items, Mode=OneWay}" />

我正在尝试通过 TreeViewItem Selected 路由事件设置焦点:

private void solutionsModel_Selected(object sender, RoutedEventArgs e)
{
if (solutionsModel.SelectedItem != null && solutionsModel.SelectedItem is SolutionViewModel)
{
if (e.OriginalSource != null && e.OriginalSource is TreeViewItem)
{
FocusManager.SetFocusedElement(solutionsModel, e.OriginalSource as TreeViewItem);
}
}
}

我正在尝试将焦点设置在 ControlTemplate 中的 TreeViewItem 上:

<Style d:IsControlPart="True" TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TreeViewItem}">
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="true">
<Trigger.Setters>
<Setter Property="FocusManager.FocusedElement" Value="{Binding RelativeSource={RelativeSource Self}}"></Setter>
</Trigger.Setters>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="true" />
<Condition Property="IsSelectionActive" Value="false" />
</MultiTrigger.Conditions>
<!--
<MultiTrigger.Setters>
<Setter Property="FocusManager.FocusedElement" Value="{Binding RelativeSource={RelativeSource Self}}"></Setter>
</MultiTrigger.Setters>
-->
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

这两种方法都获得焦点,但失去键盘焦点(TreeViewItem.IsSelectionActive 为 false)。窗口中没有其他元素具有我可以分辨的焦点或键盘焦点(在测试中,我在另一个面板上只有一个只读文本框可以获得焦点)。有趣的是,我可以将键盘焦点放在(注释掉的)MultiTrigger 上,其中 IsSelectionActive 是 false,但当然这会强制键盘焦点放在 TreeViewItem 上在任何时候。

有没有其他方法可以更好地获得键盘焦点,在哪些情况下无法获得键盘焦点?

最佳答案

如果可以的话,我会把它添加为评论,但是,为什么不让 TreeView 处理焦点并使用 TreeView.SelectedItem 抽象地处理项目. TreeView 将始终能够知道在输入开始时选择了哪个项目。如果选择了一个项目,则 TreeView 处于焦点状态,您可以通过管道将键盘命令传递给该项目。

关于c# - 如何以编程方式将键盘焦点放在 WPF TreeViewItem 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5967311/

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