好吧,预计它会以这种方式运行。边距被认为是控件的“外部”,因此边距区域不会让点击进入控件。相反,填充区域被认为是控件的一部分(在控件本身和呈现内容的“客户区”之间),因此填充区域正在获得点击。
看起来你可以只用Padding="5,0,0,0"
. (这只会在左侧添加填充。)请参阅这张关于 WPF 盒子模型的图片。
更新:根据您的评论,您需要破解默认模板。默认模板可以在这里找到:http: //msdn.microsoft.com/en-us/library/ms752319%28v=vs.100%29.aspx。
您需要进行以下更改:将 包含BulletDecorator
到Grid
中,并将所需的边距设置为BulletDecorator
. 这一定会有所帮助,因为希望重点将应用于整体Grid
而不是BulletDecorator
. 或者,或者,您可以将边距设置为BulletDecorator.Bullet
's Border
。
更新:当然最好不要将整个模板定义复制到实际代码中以提高可维护性。可以通过以下技巧避免。
假设您决定在Bullet
's设置额外的边距Border
。您可以尝试Border
在Checkbox
'sBullet
中覆盖默认样式。以下技巧应该做到这一点:
<!-- first, define a style for border -->
<Style TargetType="Border" x:Key="MyCoolBorderWithMargin">
<Setter Property="Margin" Value="5,0,0,0"/>
</Style>
<!-- then, define a style for BulletDecorator -->
<!-- this style overrides the style for inner borders -->
<Style TargetType="BulletDecorator" x:Key="MyCoolDecoratorStyle">
<Style.Resources>
<Style TargetType="Border"
BasedOn="{StaticResource MyCoolBorderWithMargin}"/>
</Style.Resources>
</Style>
<!-- finally, override the style for CheckBox -->
<Style TargetType="CheckBox">
<Style.Resources>
<Style TargetType="BulletDecorator"
BasedOn="{StaticResource MyCoolDecoratorStyle}"/>
</Style.Resources>
</Style>
这应该会有所帮助。
Beware that this code is a hack, using the knowledge about how the default control template for CheckBox
is implemented in the current WPF version. (If you are using WPF version different from 4.0, you may need to update the code, as it's version-specific: different versions of WPF use different control templates!)