В элементе управления, над которым я сейчас работаю, когда элемент находится в фокусе, прямоугольник фокуса по умолчанию охватывает всю строку и все ее видимые дочерние элементы. Я знаю, как это скрыть. Но я все еще хочу такой индикатор фокуса, когда элемент имеет фокус клавиатуры. Я читал о свойстве IsKeyboardFocused, но это верно и тогда, когда элемент был нажат мышью. Так что я думаю, мне нужно как-то использовать FocusVisualStyle. Но я не могу понять, как.
Вот как выглядит фокус по умолчанию:
А вот что должно понравиться:
Вот мой код XAML для шаблона элемента управления:
<Border ...>
<ContentPresenter FocusManager.IsFocusScope="True"
Content="{TemplateBinding HeaderedContentControl.Header}"
ContentTemplate="{TemplateBinding HeaderedContentControl.HeaderTemplate}"
ContentStringFormat="{TemplateBinding HeaderedItemsControl.HeaderStringFormat}"
ContentSource="Header"
Name="PART_Header" .../>
</Border>
<!-- Additional border glare inside the item -->
<Border BorderThickness="1" BorderBrush="#80ffffff" Margin="1"
SnapsToDevicePixels="True" CornerRadius="2"/>
<!-- Focus rectangle inside the item -->
<Rectangle StrokeDashArray="1 2" StrokeThickness="1" Stroke="Black"
SnapsToDevicePixels="True" Margin="2"
Visibility="Hidden" Name="FocusRectangle"
FocusVisualStyle="{StaticResource FocusStyle}"/>
В моем XAML уже есть прямоугольник фокуса, который по умолчанию невидим. С помощью FocusVisualStyle или чего-то еще это должно быть видно. Но мне это не удалось. Он либо виден при любом фокусе, либо никогда.