全局按钮';s动态样式,每个按钮都有不同的图像

本文关键字:按钮 图像 样式 动态 全局 | 更新日期: 2023-09-27 18:21:28

我在Wpf C#应用程序中使用按钮。我已经为这些按钮声明了一种风格:

  <Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Grid Margin="0" Width="100" Height="60" >
                        //some more code here that sets color and stuff
                           <ContentPresenter HorizontalAlignment="Stretch" />
                            <Image  Source="Images/search_48.png" / >
                   //some more code here (triggers)
            </Setter.Value>
        </Setter>
    </Style>

我希望这个样式应用于我的窗口中的所有按钮,但图像不同。

我本可以通过复制代码并将每个按钮设置为自己的样式来创建许多样式,同时只更改图像,但我不希望这种重复。

我这样设置按钮样式:

<Button x:Name="buttonName" 
        Style="{DynamicResource ButtonStyle}" 
        Content="button text">

正如我提到的,我有很多这样的按钮,我希望它们都有相同的样式,但要为每个按钮更改这种样式的图像源。

有没有一种方法可以做到这一点,而不必为每个按钮创建相同的样式和不同的名称?

全局按钮';s动态样式,每个按钮都有不同的图像

为什么不把图像放在按钮内而不是样式中呢。

<Button x:Name="buttonName" Style="{DynamicResource ButtonStyle}" >
    <Image Source="Images/search_48.png" / >
</Button>

样式看起来是这样的:

<Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid Margin="0" Width="100" Height="60" >
                    //some more code here that sets color and stuff
                       <ContentPresenter HorizontalAlignment="Stretch" />
               //some more code here (triggers)
        </Setter.Value>
    </Setter>
</Style>

更新:如果您有文本和图像,请使用堆栈面板:

<Button x:Name="buttonName" Style="{DynamicResource ButtonStyle}" >
    <StackPanel Orientation="Horizontal">
        <Image Source="Images/search_48.png" Stretch="None" />
        <TextBlock>text</TextBlock>
    </StackPanel>
</Button>

使用堆叠面板将允许您对按钮布局使用垂直或水平方向。然后可以使用按钮内部的边距定位文本和图像。