Ресурс нескольких стилей в кнопке метро WPF - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь перевести кнопку сохранения в кнопку многократного использования, и оригинальный стиль кнопки выглядит следующим образом =>

            <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 голосов
/ 25 сентября 2018

Вам нужно где-то определить StackPanel и установить для него свойство Content Button.Вы можете определить StackPanel как ресурс без общего доступа рядом с Style в App.xaml следующим образом:

<StackPanel x:Key="sp" x:Shared="False" Orientation="Horizontal" Height="25" Width="90">
    <Image Source="screen.png" Width="20" Margin="3 0"></Image>
    <TextBlock VerticalAlignment="Center" Margin="15 0">Save</TextBlock>
</StackPanel>

<Style TargetType="Button" x:Key="SaveButton">
    <Style.Resources>
    </Style.Resources>
    <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"/>
    <Setter Property="Content" Value="{StaticResource sp}" />
</Style>
0 голосов
/ 25 сентября 2018

Вы сказали, что хотите повторно использовать стили, поэтому не следует их вкладывать.Что нужно сделать, это:

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