WPF按钮样式

WPF按钮样式,wpf,styles,Wpf,Styles,我有WPF表单,它有许多具有相同代码的按钮。所有按钮的外观必须相同 例如,这些按钮之一的代码 <Button x:Name="btnAddRelative" Width="120" Click="btnAddRelative_Click" > <Button.Content> <StackPanel Orientation="Horizontal"> <Image Height="26" Horizont

我有WPF表单,它有许多具有相同代码的按钮。所有按钮的外观必须相同 例如,这些按钮之一的代码

<Button x:Name="btnAddRelative" Width="120" Click="btnAddRelative_Click"  >
    <Button.Content>
        <StackPanel Orientation="Horizontal">
            <Image Height="26" HorizontalAlignment="Left">
                  <Image.Source>
                      <BitmapImage UriSource="images/add.png" />
                  </Image.Source>
            </Image>
            <TextBlock Text="  Add Relative" Height="20" VerticalAlignment="Center"/>
        </StackPanel>
    </Button.Content>
</Button>

如何创建一种样式并将其用于所有按钮。所有按钮都具有相同的png图像,只是它们的文本不同。我怎样才能做到这一点。 我尝试在资源部分中使用样式对象执行此操作:

<UserControl.Resources>
    <Style TargetType="Button" x:Key="AddStyle">
        <Setter Property="Content">
            <Setter.Value>
                <StackPanel Orientation="Horizontal">
                    <Image Height="26" HorizontalAlignment="Left">
                        <Image.Source>
                            <BitmapImage UriSource="images/add.png" />
                        </Image.Source>
                    </Image>
                    <TextBlock Text="  " Height="20" VerticalAlignment="Center"/>
                </StackPanel>
            </Setter.Value>
        </Setter>
    </Style>
</UserControl.Resources>


但是这个代码不起作用。任何人都知道我该怎么做吗?

试着改变你的风格,如下所示

<UserControl.Resources>
        <Style
            TargetType="Button"
            x:Key="AddStyle">
            <Setter
                Property="Template">
                <Setter.Value>
                    <ControlTemplate>
                        <StackPanel
                            Orientation="Horizontal">
                            <Image
                                Height="26"
                                HorizontalAlignment="Left">
                                <Image.Source>
                                    <BitmapImage
                                        UriSource="images/add.png" />
                                </Image.Source>
                            </Image>
                            <TextBlock
                                Text="  "
                                Height="20"
                                VerticalAlignment="Center" />
                        </StackPanel>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
试试这个

   <Window.Resources>
    <Style TargetType="Button"
           x:Key="AddStyle">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <StackPanel Orientation="Horizontal">
                        <Image Height="26"
                               Width="20"
                               HorizontalAlignment="Left">
                            <Image.Source>
                                <BitmapImage UriSource="/WpfApplication33;component/Images/MoveLeft.png" />
                            </Image.Source>
                        </Image>
                        <TextBlock Text ="{TemplateBinding Content}"
                                   Height="20"
                                    />
                    </StackPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

</Window.Resources>
<Grid>
    <StackPanel>
    <Button  Style="{StaticResource AddStyle}"
             Height="25" Width="100"  
             Content="Button1"></Button>
    <Button  Style="{StaticResource AddStyle}"
             Height="25"
             Width="100"

             Content="Button22"></Button>
        <Button  Style="{StaticResource AddStyle}"
                 Height="25"
                 Width="100"
                 Content="Button2233"></Button>
        <Button  Style="{StaticResource AddStyle}"
                 Height="25"
                 Width="100"
                 Content="Button2332"></Button>

    </StackPanel>
</Grid>


注意:如果您必须显示除纯文本以外的任何内容,请使用ContentPresenter而不是TextBlock

如果图像已修复,您可以在样式中对其进行硬编码,并使用按钮的内容属性文本框的内容

 <Style x:Key="ButtonStyle" TargetType="Button">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Border
                            Background="{TemplateBinding Background}"                            
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">
                            <StackPanel 
                                Orientation="Horizontal">
                                <!--<Image Height="26" HorizontalAlignment="Left">
                                    <Image.Source>
                                        <BitmapImage UriSource="images/add.png" />
                                    </Image.Source>
                                </Image>-->
                                <TextBlock 
                                    Foreground="{TemplateBinding Foreground}"
                                    Text="{TemplateBinding Content}" 
                                    Height="20" 
                                    VerticalAlignment="{TemplateBinding VerticalAlignment}"/>
                            </StackPanel>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>


它可以工作。但不是我想要的。我在ResourceDictionary中有应用程序级样式。你的风格取代了我的风格。主要的事情我想显示我的png和特定的文本,但不清除我的主按钮样式Polaris,使用用户控件并将按钮的内容设置为这个新控件可能对你有用。更新了我的答案。在stackPanel中我有TextBlock。文本块文本必须是每个按钮的特定文本。对于userControl版本,我无法更改TextBlock文本。当然可以,您只需从名为ButtonText或类似内容的新userControl中公开一个依赖项属性。
   <Window.Resources>
    <Style TargetType="Button"
           x:Key="AddStyle">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <StackPanel Orientation="Horizontal">
                        <Image Height="26"
                               Width="20"
                               HorizontalAlignment="Left">
                            <Image.Source>
                                <BitmapImage UriSource="/WpfApplication33;component/Images/MoveLeft.png" />
                            </Image.Source>
                        </Image>
                        <TextBlock Text ="{TemplateBinding Content}"
                                   Height="20"
                                    />
                    </StackPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

</Window.Resources>
<Grid>
    <StackPanel>
    <Button  Style="{StaticResource AddStyle}"
             Height="25" Width="100"  
             Content="Button1"></Button>
    <Button  Style="{StaticResource AddStyle}"
             Height="25"
             Width="100"

             Content="Button22"></Button>
        <Button  Style="{StaticResource AddStyle}"
                 Height="25"
                 Width="100"
                 Content="Button2233"></Button>
        <Button  Style="{StaticResource AddStyle}"
                 Height="25"
                 Width="100"
                 Content="Button2332"></Button>

    </StackPanel>
</Grid>
 <Style x:Key="ButtonStyle" TargetType="Button">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Button">
                        <Border
                            Background="{TemplateBinding Background}"                            
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">
                            <StackPanel 
                                Orientation="Horizontal">
                                <!--<Image Height="26" HorizontalAlignment="Left">
                                    <Image.Source>
                                        <BitmapImage UriSource="images/add.png" />
                                    </Image.Source>
                                </Image>-->
                                <TextBlock 
                                    Foreground="{TemplateBinding Foreground}"
                                    Text="{TemplateBinding Content}" 
                                    Height="20" 
                                    VerticalAlignment="{TemplateBinding VerticalAlignment}"/>
                            </StackPanel>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>