XAML中Button应用自定义样式后无法单独设置BorderThickness问题
问题根源
自定义Button的ControlTemplate时,模板内部的Border元素被硬编码写入了固定值BorderThickness="0,0,0,1",没有通过TemplateBinding关联Button控件本身的对应依赖属性,因此外层按钮实例上设置的BorderThickness、BorderBrush无法传递到模板内的边框元素,属性设置直接失效。
修复方案
修改自定义样式,做两处调整即可:
- 给
navButtStyle样式添加默认的BorderThickness、BorderBrush属性设置,保证未单独配置的按钮保持原有下边框效果 - 将模板内Border的对应属性改为
TemplateBinding绑定,关联按钮自身的属性,支持实例级别的自定义覆盖
修改后的完整样式代码如下:
<UserControl.Resources> <Style x:Key="navButtStyle" TargetType="Button"> <!-- 样式默认值,未单独设置的按钮会使用该配置 --> <Setter Property="BorderThickness" Value="0,0,0,1"/> <Setter Property="BorderBrush" Value="Black"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <Grid Background="{TemplateBinding Background}"> <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/> <!-- 用TemplateBinding绑定按钮自身属性,支持实例自定义 --> <Border BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> </UserControl.Resources>
修改完成后无需调整按钮实例的原有代码:你给navButton1设置的BorderThickness="0,1,0,0"会自动生效,其余两个导航按钮没有单独设置这两个属性,会自动继承样式的默认配置,保持原来的底部边框显示效果。
内容的提问来源于stack exchange,提问作者Matt Finder
相关产品推荐
相关产品推荐

