编程语言
首页 > 编程语言> > c#-全局按钮的动态样式,每个按钮具有不同的图像

c#-全局按钮的动态样式,每个按钮具有不同的图像

作者:互联网

我在Wpf C#应用程序中使用Buttons.
我已经为这些按钮声明了一种样式:

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

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

有没有一种方法可以在不为每个按钮创建具有不同名称的相同样式的情况下做到这一点?

解决方法:

您为什么不将图像放在按钮内而不是样式内.

<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>

使用堆栈面板将使您可以将垂直或水平方向用于按钮布局.然后可以使用按钮内的边距定位文本和图像.

标签:button,coding-style,wpf,c
来源: https://codeday.me/bug/20191201/2083730.html