WPF Metro按钮中的多种样式资源

时间:2018-09-25 03:11:04

标签: wpf button mahapps.metro

我正在尝试将保存按钮恢复为可重用按钮,并且原始按钮样式如下所示:

            <Button Margin="5"
                    Padding="0"
                    Width="98" 
                    Cursor="Hand"
                    x:Name="btnSave" 
                    Click="btnSave_Click">
                          <StackPanel  Orientation="Horizontal" Height="25" Width="90">
                               <Image Source="\Image\Other\Save.ico" Width="20" Margin="3 0"></Image>
                               <TextBlock VerticalAlignment="Center" Margin="15 0">Save</TextBlock>
                          </StackPanel>
            </Button>

只是文本和图像。所以我只想将此按钮用作可重用按钮。所以我将这个按钮移到App.xaml上,就像这样=>

<Style TargetType="Button" x:Key="SaveButton" BasedOn="{StaticResource MetroButton}">
                <Setter Property="Margin" Value="5"/>
                <Setter Property="Padding" Value="0"/>
                <Setter Property="Width" Value="98"/>
                <Setter Property="Cursor" Value="Hand"/>
                <Setter Property="FontSize" Value="12"/>               
                <Style.Resources>
                    <Style TargetType="StackPanel">
                        <Setter Property="Orientation" Value="Horizontal"/>
                        <Setter Property="Height" Value="25"/>
                        <Setter Property="Width" Value="90"/>
                        <Setter Property="Background" Value="Red"/>
                        <Style.Resources>
                            <Style TargetType="Image">
                                <Setter Property="Source" Value="/Image/Other/Save.ico"/>
                                <Setter Property="Width" Value="20"/>
                                <Setter Property="Margin" Value="3 0"/>
                            </Style>
                            <Style TargetType="TextBlock">
                                <Setter Property="VerticalAlignment" Value="Center"/>
                                <Setter Property="Margin" Value="15 0"/>
                                <Setter Property="Text" Value="Save"/>
                            </Style>
                        </Style.Resources>
                    </Style>
                </Style.Resources>
            </Style>

但是移动该按钮后,此按钮不再起作用。请让我知道为什么这个不起作用。

2 个答案:

答案 0 :(得分:0)

您说过要重用样式,因此不应嵌套样式。正确的做法是:

<Style x:Key="SaveButton" TargetType="{x:Type Button}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Button}">
                            <StackPanel Orientation="Horizontal" Height="25" Width="90" Background="Red">
                                <Image/>
                            </StackPanel>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

答案 1 :(得分:0)

您需要在某处定义StackPanel并将Button的{​​{1}}属性设置为其。您可以这样将Content定义为StackPanelStyle旁边的非共享资源:

App.xaml