gpt4 book ai didi

wpf - 在 ControlTemplate 中的控件上设置焦点(第 2 部分)

转载 作者:行者123 更新时间:2023-12-04 01:01:17 25 4
gpt4 key购买 nike

我对肯定是最常见的 WPF 要求之一感到困惑。我已阅读 this question但我对解决方案的实现不起作用。

这是lookless控件的标记:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfTest">
<Style TargetType="{x:Type local:CustomControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CustomControl}">
<Border>
<TextBox x:Name="myTextBox" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsFocused"
Value="True">
<Setter Property="FocusManager.FocusedElement"
Value="{Binding ElementName=myTextBox}" />
<Setter TargetName="myTextBox"
Property="Background"
Value="Green" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>

这是包含 CustomControl 实例的 Window 的标记:
<Window x:Class="WpfTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfTest"
Title="Window1" Height="300" Width="300">

<local:CustomControl x:Name="CCtl" />
</Window>

这是代码隐藏:
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
Loaded += (RoutedEventHandler)delegate { CCtl.Focus(); };
}
}

加载 Window1 后,文本框变为绿色(表示触发器有效),但焦点仍位于 CCtl 而不是文本框。毫无疑问,这与显示以下数据错误的输出有关:

Cannot find source for binding with reference 'ElementName=myTextBox'. BindingExpression:(no path); DataItem=null; target element is 'CustomControl' (Name='CCtl'); target property is 'FocusedElement' (type 'IInputElement').



我不知道为什么会出现这个错误。收到任何指点,感激不尽。

最佳答案

尝试将其用于您的触发器:

<Trigger Property="IsFocused" Value="True">
<Setter TargetName="myTextBox" Property="FocusManager.FocusedElement" Value="{Binding ElementName=myTextBox}" />
</Trigger>

该错误告诉您它无法找到 myTextBox,因为该名称不在应用 FocusedElement 属性的范围内。在这种情况下,它位于 CCtl 实例本身上,它无法看到它自己的模板内部。通过在模板内设置属性,Binding 可以定位命名元素。

关于wpf - 在 ControlTemplate 中的控件上设置焦点(第 2 部分),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4323631/

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