我正在努力實現實現FocusVisualStyle用鼠標和鍵盤焦點
爲簡單起見,我有單元網格,我嘗試添加的FocusVisualStyle虛線矩形到每個細胞,當它是聚焦。然而,只有當元素被導航到使用鍵盤時,樣式才適用。我期望達到相同的效果,但它可以使用鍵盤焦點和鼠標焦點(單擊單元格時)。
我曾嘗試
我看着用容器像一個Border
,但沒有虛線,試圖使用過的元素虛線矩形中,它的位置,但這是提供不一致結果。我還嘗試將觸發器附加到單元格的IsFocused
屬性,但該屬性僅適用於Keyboard Focus。
目前代碼
現在我有(一StackPanel
)設置爲細胞活動,使得通過網格我的自定義導航。我目前的「視覺風格」是將背景更改爲適用於鼠標和鍵盤焦點的顏色。我正在爲單元格周圍的虛線矩形替換背景更改,但我嘗試的XAML不起作用,因爲FocusVisualStyle僅適用於鍵盤焦點。
這是我的XAML和一個簡化版本C#的是我曾嘗試
XAML
<!-- The "cell" I'm trying to acheive a dashed border around -->
<StackPanel x:Key="ContactCell"
Focusable="True"
GotFocus="StackPanel_GotFocus"
LostFocus="StackPanel_LostFocus"
PreviewMouseDown="Contact_Select"
Style="{DynamicResource ContactFocusStyle}">
<!-- other children in here -->
</StackPanel>
<Style x:Key="ContactFocusStyle" TargetType="StackPanel">
<Style.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="FocusVisualStyle"
Value="{DynamicResource MyFocusVisualStyle}"/>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="MyFocusVisualStyle">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Rectangle Stroke="Black"
StrokeDashArray="2 3"
Fill="Transparent"
StrokeDashCap="Round"
RadiusX="3"
RadiusY="3"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
C#
private void Contact_Select(object send, MouseButtonEventArgs e)
{
StackPanel sender = (StackPanel)send;
sender.Focus();
}
private void StackPanel_GotFocus(object sender, RoutedEventArgs e)
{
StackPanel s = (StackPanel)sender;
s.Background = Brushes.Red;
}
private void StackPanel_LostFocus(object sender, RoutedEventArgs e)
{
StackPanel s = (StackPanel)sender;
s.Background = Brushes.Transparent;
}
謝謝!這是一個很好的答案! –