WPF复选框样式使焦点边框表现奇怪

时间:2010-10-21 10:41:43

标签: wpf focus styles resourcedictionary

我正在使用样式表的WPF。在我的Style中,我一直在尝试为CheckBox自定义虚线焦点边框的外观。我需要聚焦边框只能在广场周围绘制而不是整个控件。

我将样式宽度设置为15,虚线边框是正确的,但不包围正方形,它偏向一边。

我已经包含了这种风格。

感谢您的帮助。

样式表片段:

<Setter Property="Control.Template">
    <Setter.Value>
        <ControlTemplate>
            <Rectangle StrokeThickness="1" Stroke="Black"  StrokeDashArray="1 2" SnapsToDevicePixels="true" Width="15"/>
        </ControlTemplate>
    </Setter.Value>
</Setter>

2 个答案:

答案 0 :(得分:1)

没有太大变化,但我觉得它看起来不错

<Style x:Key="MyFocusVisual">
    <Setter Property="Control.Template">
        <Setter.Value>
            <ControlTemplate>
                <Rectangle StrokeThickness="1" Margin="-1,1,-1,1" Stroke="Black" HorizontalAlignment="Left" StrokeDashArray="1 2" SnapsToDevicePixels="true" Width="15"/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<Canvas>
    <CheckBox Canvas.Left="100" Canvas.Top="100" TabIndex="0" Content="Content1" FocusVisualStyle="{DynamicResource MyFocusVisual}"/>
    <CheckBox Canvas.Left="100" Canvas.Top="120" TabIndex="1" Content="Content2" FocusVisualStyle="{DynamicResource MyFocusVisual}"/>
</Canvas>

答案 1 :(得分:0)

使用Blend或XAMLWriter使用techniques shown here中的一个来获取CheckBox的ControlTemplate。

查看“square”的定义方式和位置 - 我相信你会看到它有一个边距和/或填充和/或其他格式。

此时,您可以使用该信息来实现您的Style。从你的代码片段中不清楚你是否真的实现了CheckBox的ControlTemplate,但这可能是最简单的。

哦,还有FYI - 在WPF中,它们被称为ResourceDictionaries,而不是样式表。