WPF设置控件获得焦点FocusManager

时间:2023-03-09 19:28:14
WPF设置控件获得焦点FocusManager

简单用法如下:

在父类容器中通过附加属性FocusManager.FocusedElement来绑定需要强制获得焦点的控件,用法如下:

<Grid FocusManager.FocusedElement="{Binding ElementName=btn}">
        <Button x:Name="btn" Content="1234"/>

</Grid>

需要注意的是:当控件使用Style或者Template重写了控件的结构时,这样设置可能会无效,此时需要进入到Template中去设置

可以查看例子:

 <Window x:Class="FocusManagerDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<!--需要测试外层Button时,可以去掉注释,同时注意,同一时刻内只有一个控件能获得焦点<Grid FocusManager.FocusedElement="{Binding ElementName=btn}">-->
<Button x:Name="btn" Content="1234"/>
<Grid>
<TextBox x:Name="txt" Text="abc" Margin="106,73,97,145">
<TextBox.Style>
<Style TargetType="TextBox">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Grid FocusManager.FocusedElement="{Binding ElementName=btn123}">
<Button x:Name="btn123" Content="123" Margin="10"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</TextBox.Style>
</TextBox>
</Grid>
</Grid>
</Window>