更改复选框的可检查区域的宽度

时间:2011-06-21 16:11:24

标签: wpf

我有一个CheckBox对象,它没有任何与之关联的文本。 它在一个Grid中,有另一个coulmn用作它的标签。 您可以单击复选框旁边的空格,它将切换复选框 我希望它只是实际复选框的区域而不是它周围的空白区域(因为它的文本设置为空)。

我尝试设置宽度= 5,但这没有什么区别

非常感谢你!

2 个答案:

答案 0 :(得分:6)

听起来你的CheckBox正在拉伸到网格单元的整个宽度(所有宽度都可以点击),并且你不希望它伸展。

将CheckBox的Horizo​​ntalAlignment属性设置为Left(或Center或Right)。然后它将完全是复选框所需的宽度,而不是拉伸到其父级提供的整个宽度。

答案 1 :(得分:2)

为此,您必须进入复选框模板并进行修改。具体来说,您应该进入并删除显示文本的ContentPresenter。由于你没有文字,这不是问题。最终结果看起来像这样。只需将该样式添加到您的复选框即可。

默认模板ContentPresenter位于Bullet下。因此,单击该内容演示者(即使为空,我认为它具有默认大小)将激活控件单击逻辑。

<Style x:Key="CheckBoxStyle1" TargetType="{x:Type CheckBox}">
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
    <Setter Property="Background" Value="{StaticResource CheckRadioFillNormal}"/>
    <Setter Property="BorderBrush" Value="{StaticResource CheckRadioStrokeNormal}"/>
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="FocusVisualStyle" Value="{StaticResource EmptyCheckBoxFocusVisual}"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type CheckBox}">
                <BulletDecorator Background="Transparent" SnapsToDevicePixels="true">
                    <BulletDecorator.Bullet>
                        <Microsoft_Windows_Themes:BulletChrome BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" IsChecked="{TemplateBinding IsChecked}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}"/>
                    </BulletDecorator.Bullet>
                </BulletDecorator>
                <ControlTemplate.Triggers>
                    <Trigger Property="HasContent" Value="true">
                        <Setter Property="FocusVisualStyle" Value="{StaticResource CheckRadioFocusVisual}"/>
                        <Setter Property="Padding" Value="2,0,0,0"/>
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="false">
                        <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>