1

我有一些主要包含组合框、文本框和复选框的窗口。当您单击一个以获得焦点时,我需要一种方法让它们用彩色框(老板的命令)进行概述。有没有比覆盖所有这些控件的默认样式更容易做到这一点的方法?我以前从来没有这样做过,所以我需要花很多时间才能弄清楚。

4

1 回答 1

5

您可以尝试将FocusVisualStyle添加到需要不同焦点矩形样式的控件中。

从上面的链接

第二种机制是提供一个单独的样式作为FocusVisualStyle属性的值;“焦点视觉样式”为在控件顶部绘制的装饰器创建单独的视觉树,而不是通过替换来更改控件或其他 UI 元素的视觉树。

Window 的 Xaml 中的类似内容

<Window.Resources>
    <Style x:Key="NewFocusVisual">
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate>
                    <Border>
                        <Rectangle Stroke="Red"  Margin="2" StrokeThickness="1"  StrokeDashArray="1 2" />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

或您的 Application.Xaml 文件。

<Application.Resources>
    <Style x:Key="NewFocusVisual">
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate>
                    <Border>
                        <Rectangle Stroke="Red"  Margin="2" StrokeThickness="1"  StrokeDashArray="1 2" />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Application.Resources>

用法:

<ComboBox FocusVisualStyle="{StaticResource NewFocusVisual}"  Height="23" HorizontalAlignment="Left" Margin="238,102,0,0" Name="ComboBox1" VerticalAlignment="Top" Width="120" />
<CheckBox FocusVisualStyle="{StaticResource NewFocusVisual}" Content="CheckBox" Height="16" HorizontalAlignment="Left" Margin="238,71,0,0" Name="CheckBox2" VerticalAlignment="Top" />
<TextBox FocusVisualStyle="{StaticResource NewFocusVisual}" Height="23" HorizontalAlignment="Left" Margin="238,144,0,0" Name="TextBox1" VerticalAlignment="Top" Width="120" />

如果您希望针对每种类型的焦点事件更改焦点矩形,Microsoft 声明:

来自 Microsoft:焦点视觉样式专门用于键盘焦点。因此,焦点视觉样式是一种可访问性功能。如果您希望通过鼠标、键盘或以编程方式对任何类型的焦点进行 UI 更改,则不应使用焦点视觉样式,而应在样式或模板中使用设置器和触发器,这些样式或模板根据一般焦点属性的值工作例如 IsFocused 或 IsFocusWithin。


试一试,它适用于 TextBox 尚未检查您的其他控件

<Application.Resources>
    <Style TargetType="TextBox" >
        <Style.Triggers>
            <Trigger Property="IsFocused" Value="True">
                <Setter Property="Control.BorderBrush" Value="Red"  />
                <Setter Property="Control.BorderThickness" Value="3" />
            </Trigger>
        </Style.Triggers>
    </Style>

</Application.Resources>
于 2012-05-27T04:08:42.450 回答