WPF:如何创建一个应用样式和按钮的按钮“模板”有一个图像吗?

时间:2010-01-22 15:57:24

标签: wpf xaml button styles controltemplate

我的WPF应用程序中有多个位置需要一个外观和按钮的按钮。感觉就像一个普通的按钮,但是:

  1. 它上面显示了一个特定的图标(定义为{StaticResource EditIcon}
  2. 它应用样式(定义为{StaticResource GrayOutButtonStyle}
  3. 我更喜欢在一个位置定义这些属性,而不是在每个使用按钮的地方重复它们。 在XAML中执行此操作的适当方法是什么?

    -

    如果有帮助,下面是我目前正在做的事情,但我被告知这是错误的:

    更新:这是错误的方法吗?有没有办法解决这个问题,这是“正确的方法”?

    我使用键EditButton

    将按钮定义为模板
    <ControlTemplate x:Key="EditButton" TargetType="{x:Type Button}">
         <Button Style="{StaticResource GrayOutButtonStyle}" 
                 Command="{TemplateBinding Command}">
            <Image x:Name="editImage" Source="{StaticResource EditIcon}" />
         </Button>
    </ControlTemplate>
    

    然后,我声明了一个带有模板EditButton的按钮,我想在应用程序中使用它。我还指出要在此处调用的命令:

    <Button Template="{StaticResource EditButton}" Command="..." />
    

    这不对吗?这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

另一种方法:

您是否考虑过制作自定义控件?这样,您可以创建自己的属性来设置按钮中包含的图像,而不必依赖多种样式。

<myControl:MyButton x:Name="oneButton" ImageSource="MyButton.png" />
<myControl:MyButton x:Name="anotherButton" ImageSource="MyOtherButton.png" />

class MyButton {

  private string imageSource;
  public string ImageSource {
    get {
      return this.imageSource;
    }
    set {
      this.imageSource = value;
      //set the image control's source to this.imageSource
    }
  }
}

答案 1 :(得分:0)

您可以创建一个以您应用的所有按钮为目标的样式。这样做,只需创建一个Style而不给它一个键:

<Style TargetType={x:Type Button}>
</Style>

然后在Style中,您可以添加一个设置Template属性的setter:

<Setter Property="Template">
  <Setter.Value>
    <!-- whatever you want -->
  </Setter.Value>
</Setter>