如何让 ContentControl 通过鼠标指针获得焦点?
How to make ContentControl to get Focus by mouse pointer?
我有以下页面
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel x:Name="StackPanel" Background="LightGray">
<Button x:Name="Button" Content="Button"/>
<Canvas x:Name="Canvas">
<ContentControl x:Name="CC">
<Border Width="100" Height="100" BorderThickness="1" BorderBrush="Red" Background="White"/>
</ContentControl>
<ContentControl x:Name="CC2" Canvas.Left="50" Canvas.Top="50">
<Border Width="100" Height="100" BorderThickness="1" BorderBrush="Blue" Background="White"/>
</ContentControl>
</Canvas>
</StackPanel>
</Page>
我可以按预期使用键盘 (Tab
) 在控件之间导航:Button->CC->CC2
,它们都生成了 GotFocus/LostFocus
事件。但是当我尝试使用鼠标指针导航时,只有 Button
生成了 GotFocus/LostFocus
事件。我错过了什么?非常感谢。
我可以重现你的问题。 ContenControl 继承了 Control,因此您可以使用 Control.Focus method 在其 PointPressed 事件中获得焦点。
另外,ContentControl会在PointerPressed事件结束后失去焦点,即GotFocus和LostFocus()会不断触发。所以你需要设置 e.Handled = true 来防止 LostFocus() 触发。
例如:
在 Page
的构造函数中
FindName(L"CC").as<UIElement>().PointerPressed([](IInspectable sender, PointerRoutedEventArgs const& args){
sender.as<Control>().Focus(FocusState::Programmatic);
args.Handled(true);
});
FindName(L"CC2").as<UIElement>().PointerPressed([](IInspectable sender, PointerRoutedEventArgs const& args){
sender.as<Control>().Focus(FocusState::Programmatic);
args.Handled(true);
});
我有以下页面
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel x:Name="StackPanel" Background="LightGray">
<Button x:Name="Button" Content="Button"/>
<Canvas x:Name="Canvas">
<ContentControl x:Name="CC">
<Border Width="100" Height="100" BorderThickness="1" BorderBrush="Red" Background="White"/>
</ContentControl>
<ContentControl x:Name="CC2" Canvas.Left="50" Canvas.Top="50">
<Border Width="100" Height="100" BorderThickness="1" BorderBrush="Blue" Background="White"/>
</ContentControl>
</Canvas>
</StackPanel>
</Page>
我可以按预期使用键盘 (Tab
) 在控件之间导航:Button->CC->CC2
,它们都生成了 GotFocus/LostFocus
事件。但是当我尝试使用鼠标指针导航时,只有 Button
生成了 GotFocus/LostFocus
事件。我错过了什么?非常感谢。
我可以重现你的问题。 ContenControl 继承了 Control,因此您可以使用 Control.Focus method 在其 PointPressed 事件中获得焦点。
另外,ContentControl会在PointerPressed事件结束后失去焦点,即GotFocus和LostFocus()会不断触发。所以你需要设置 e.Handled = true 来防止 LostFocus() 触发。
例如: 在 Page
的构造函数中FindName(L"CC").as<UIElement>().PointerPressed([](IInspectable sender, PointerRoutedEventArgs const& args){
sender.as<Control>().Focus(FocusState::Programmatic);
args.Handled(true);
});
FindName(L"CC2").as<UIElement>().PointerPressed([](IInspectable sender, PointerRoutedEventArgs const& args){
sender.as<Control>().Focus(FocusState::Programmatic);
args.Handled(true);
});