2015-12-14 66 views
0

我有一个CheckBox控制在我的一个窗口,只是在那里显示是否是真/假 - 我不希望我的用户与它进行交互。如何样式复选框删除边框

默认情况下,设置IsEnabled="False"灰色框,这很好。不过,我认为如果我保留一个坚实的复选标记并删除边框,它会更整洁,更明显。

起初我设置了BorderThickness="0",这似乎什么都不做。于是我去了,而不是风格,并把这个在我的资源字典:

<Style x:Key="BorderlessCheckBox" TargetType="{x:Type CheckBox}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="CheckBox"> 
       <BulletDecorator Background="Transparent"> 
        <BulletDecorator.Bullet> 
         <Border Background="#FFAEB3B9" BorderThickness="0" /> 
        </BulletDecorator.Bullet> 
       </BulletDecorator> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

这完全删除文本框 - 尽我可以告诉我无意中做覆盖整个风格,因为我没有指定检查作为我的风格的一部分,没有检查出现。

是否有直接的方式从文本框中删除边框而无需重新设计整个控件的样式?

编辑:我也尝试了borderThickness:

enter image description here

回答

1

你可以简单地通过设置BorderThickness酒店需要从CheckBox删除边框。

<CheckBox Content="Test" BorderThickness="0" /> 

如果你想编辑控件模板,最简单的方法就是打开在混合解决方案,右键单击控制和编辑模板。

Edit template

钻到控件树,你会发现,你要隐藏的checkBoxBorder控制。在这里,你看到BorderThickness来自一个TemplateBinding(因此从性质上CheckBox本身):

<Border x:Name="checkBoxBorder" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="1" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"> 
    <Grid x:Name="markGrid"> 
     <Path x:Name="optionMark" Data="F1 M 9.97498,1.22334L 4.6983,9.09834L 4.52164,9.09834L 0,5.19331L 1.27664,3.52165L 4.255,6.08833L 8.33331,1.52588e-005L 9.97498,1.22334 Z " Fill="{StaticResource OptionMark.Static.Glyph}" Margin="1" Opacity="0" Stretch="None"/> 
     <Rectangle x:Name="indeterminateMark" Fill="{StaticResource OptionMark.Static.Glyph}" Margin="2" Opacity="0"/> 
    </Grid> 
</Border> 
+0

谢谢 - 我不知道你会这么轻松地创建模板副本。为了证明我不是一个懒惰的屁股,我添加了一张屏幕截图,显示我尝试了BorderThickness,它没有做任何事情。我使用的是Metro风格 - 我认为由于某种原因,它必须重写该属性的控制权。 –