我对肯定是最常见的 WPF 要求之一感到困惑。我已阅读此问题,但我的解决方案实施不起作用。
这是无外观控件的标记:
<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 而不是文本框。毫无疑问,这与显示以下数据错误的输出有关:
找不到引用“ElementName=myTextBox”的绑定源。BindingExpression:(无路径);数据项=空;目标元素是'CustomControl'(名称='CCtl');目标属性是“FocusedElement”(类型“IInputElement”)。
我不知道为什么会出现这个错误。任何指针感激地收到,谢谢。