代码之家  ›  专栏  ›  技术社区  ›  SetiSeeker

wpf复选框样式使焦点边框行为严格

  •  2
  • SetiSeeker  · 技术社区  · 14 年前

    我正在将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 回复  |  直到 13 年前
        1
  •  1
  •   Fredrik Hedblad    14 年前

    变化不大,但我觉得看起来不错

    <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>
    
        2
  •  0
  •   Wonko the Sane    14 年前

    使用Blend或XamlWriter techniques shown here 获取复选框的ControlTemplate。

    看看“正方形”是如何定义的和在哪里定义的——我确信您会看到它应用了一个边距和/或填充和/或其他格式。

    此时,您可以使用这些信息来实现您的风格。从您的代码片段中不清楚您是否实际实现了复选框的ControlTemplate,但这可能是最简单的。

    哦,还有,在WPF中,它们被称为资源字典,而不是样式表。