2017-08-25 56 views
-1

我想在C#WPF中设计几个按钮。这些按钮应该都有不同的背景图像显示不同的图标。是否可以在所有按钮上设置相同的buttonstyle,然后指定每个独特的图标。这是我使用的样式:你可以使用相同的风格,但具有不同的背景

<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}"/> 

我还可以从代码中创建这些按钮的背后是否有可能做到这一点那里。

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

+0

看到这里的参数化模板的一个例子:https://stackoverflow.com/questions/9232502/template-binding-with-attached-properties – ASh

+0

如果可以指定每个按钮的整个'ImageBrush'而不仅仅是' ImageSource'路径,你可以使用'TemplateBinding'的'Button.Background'属性 – grek40

回答

1

有几种方法可以实现。

最直接的是为每个按钮设置BackgroundImageBrush

<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这将是您的图像。

+0

谢谢,这工作正如我想要的 – FewWords

0

您可以将EllipseFill绑定到ButtonBackground属性。然后,在样式集Background中默认为'ImageBrush'。 如果您想使按钮具有不同的图像,请将该按钮的“背景”设置为不同的图像。 你甚至可以使用不同类型的画笔作为那个特殊的按钮,而不仅仅是图像。

相关问题