首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF模板继承

WPF模板继承
EN

Stack Overflow用户
提问于 2010-07-08 22:53:56
回答 1查看 2.1K关注 0票数 0

我创建了一个按钮。我的基本要求是圆角较粗的边框,具有多种颜色(即用于购买/出售按钮)

我希望我可以创建一次模板,而不是像这样覆盖边界笔刷:

代码语言:javascript
复制
<Style x:Key="BorderButton">
  <Setter Property="Control.Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type Button}">
        <Border BorderThickness="2" 
         BorderBrush="Red" 
         CornerRadius="3" 
         Background="{x:Null}">
           <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </Border>
      </ControlTemplate>
     </Setter.Value>            
    </Setter>
  </Style>

  <Style x:Key="GreenBorderButton" BasedOn="{StaticResource BorderButton}" TargetType="{x:Type Button}">
    <Setter Property="BorderBrush" Value="Green" />
  </Style>

但它们都产生了相同的风格。我每次都需要写出整个模板吗?看起来像是不必要的代码重复(特别是当需要3-4种颜色时)。希望有一些方法可以继承模板。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-08 23:09:10

您的代码非常接近正常工作;问题是GreenBorderButton将BorderBrush应用于按钮本身,而不是覆盖的模板中的边框。

要解决此问题,只需将边框的BorderBrush更改为使用父按钮的BorderBrush即可。您可以使用如下所示的TemplateBinding来完成此操作:

代码语言:javascript
复制
<Style x:Key="BorderButton">
    <Setter Property="Control.Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border x:Name="border"
                        BorderThickness="2" 
                        BorderBrush="{TemplateBinding Property=BorderBrush}"
                        CornerRadius="3" 
                        Background="{x:Null}">
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

然后,您可以使用与已覆盖的样式相同的样式,也可以简单地这样做:

代码语言:javascript
复制
<Button Style="{StaticResource BorderButton}" BorderBrush="Blue" Content="Blue" />
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3204873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档