我創建了一個簡單的 WPF UserControl,它具有對、和事件作出反應Grid的控制元件。基本上它此時的行為就像一個按鈕,在懸停時改變顏色并在單擊時執行某些操作。ContentMouseEnterMouseLeaveMouseDown
我希望此控制元件還可以實作制表符停止并在通過控制元件進行制表符時獲得焦點。我嘗試設定IsTabStopcontains UserControl,但這似乎沒有做任何事情。
此外,雖然UserControl.Contentis a Grid,Gridcan 也已Children添加到其中,但我希望該 rootGrid成為制表符停止的內容。
有什么想法可以實作嗎?
uj5u.com熱心網友回復:
用戶控制元件.xaml
<UserControl x:Class="WpfApp1.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="100" Height="100" Focusable="False">
<Grid x:Name="grid" Background="Black" Focusable="True"
MouseEnter="Grid_MouseEnter"
MouseLeave="Grid_MouseLeave"
MouseDown="Grid_MouseDown"
GotFocus="Grid_GotFocus">
<TextBlock Text="UserControlButton?" Foreground="White"/>
</Grid>
</UserControl>
用戶控制元件.cs
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
grid.FocusVisualStyle = null;
}
// hover
private void Grid_MouseEnter(object sender, MouseEventArgs e) => grid.Background = new SolidColorBrush(Colors.Red);
private void Grid_MouseLeave(object sender, MouseEventArgs e) => grid.Background = new SolidColorBrush(Colors.Black);
private void Grid_MouseDown(object sender, MouseButtonEventArgs e) => grid.Background = new SolidColorBrush(Colors.Blue);
// tabstop
private void Grid_GotFocus(object sender, RoutedEventArgs e) => grid.Background = new SolidColorBrush(Colors.Orange);
private void grid_MouseUp(object sender, MouseButtonEventArgs e)
{
}
}
uj5u.com熱心網友回復:
默認情況下,Grid它的Focusable屬性設定為false,因此它不會接收任何型別的焦點。
獲取或設定一個值,該值指示元素是否可以接收焦點。
當直接從 UIElement 派生時(而不是從 Control 派生),請考慮您是否希望您的元素可聚焦,因為默認情況下該元素將不可聚焦。
如果將其設定為true,它將自動參與選項卡。
<Grid Focusable="True" KeyboardNavigation.TabNavigation="None" Background="Yellow">
如果您只希望Grid成為制表位,而不是其子級,請將TabNavigation屬性設定為None.
此容器內不允許使用鍵盤導航。
<Grid Focusable="True" KeyboardNavigation.TabNavigation="None" Background="Yellow">
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/504355.html
