你可以使用相同的风格,但背景不同

时间:2017-08-25 08:25:39

标签: c# wpf xaml

我正在尝试在C#WPF中设置一些按钮。这些按钮应该都有不同的背景图像,显示不同的图标。是否可以在所有按钮上设置相同的按钮样式,然后指定每个唯一图标。这是我正在使用的风格:

<Style TargetType="Button" x:Key="ButtonStyle">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="Button">
        <Grid>
          <Ellipse Fill="SlateGray"/>
          <Ellipse Margin="2">
            <Ellipse.Fill>
              <ImageBrush ImageSource="..." Stretch="Fill"/> <!-- What should I write here? -->
            </Ellipse.Fill>
          </Ellipse>
        </Grid>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

这就是我在XAML中创建按钮的方法:

<Button Style="{StaticResource ButtonStyle}"/> //How do I specify a unique image?
<Button Style="{StaticResource ButtonStyle}"/>

如果可以在那里执行,我也可以从代码后面创建这些按钮。

如何使用相同的样式但使用不同的图像?

2 个答案:

答案 0 :(得分:1)

有几种方法可以实现这一目标。

最直接的做法是将每个按钮的Background设置为ImageBrush

<Button Width="120" Height="30" Style="{StaticResource ButtonStyle}">
    <Button.Background>
        <ImageBrush ImageSource="yourimage.jpg" Stretch="Fill" />
    </Button.Background>
</Button>

然后更新Style以使用TemplateBinding

<Style TargetType="Button" x:Key="ButtonStyle">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="Button">
        <Grid>
          <Ellipse Fill="SlateGray"/>
          <Ellipse Margin="2" Fill={TemplateBinding Background} />
        </Grid>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

另一种方法是创建一个自定义按钮(例如ImageButton),其中DependencyProperty就是您的形象。

答案 1 :(得分:0)

您可以将Ellipse的{​​{1}}绑定到Fill的{​​{1}}属性。然后,在样式集Background中默认为'ImageBrush'。 如果要使用具有不同图像的按钮,请将该按钮的“背景”设置为不同的图像。 您甚至可以使用不同类型的画笔来处理该特殊按钮,而不仅仅是图像。