我有一个CheckBox对象,它没有任何与之关联的文本。 它在一个Grid中,有另一个coulmn用作它的标签。 您可以单击复选框旁边的空格,它将切换复选框 我希望它只是实际复选框的区域而不是它周围的空白区域(因为它的文本设置为空)。
我尝试设置宽度= 5,但这没有什么区别
非常感谢你!答案 0 :(得分:6)
听起来你的CheckBox正在拉伸到网格单元的整个宽度(所有宽度都可以点击),并且你不希望它伸展。
将CheckBox的HorizontalAlignment属性设置为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>