我也想为其他按钮重用First Button的Style块,该怎么办?

问题描述 投票:0回答:2

我为按钮的MouseEnter效果编写了一个简单的代码。还有两个我想要相同效果的其他按钮。不用再次编写相同的代码,我该如何重用它们?

<Button Content="Common Factor" FontSize="32" Foreground="White"
 Background="#FF3399FF" Width="250" Height="60" Margin="20" >
                <Button.Style>
                    <Style TargetType="Button">
                        <Style.Triggers>
                            <EventTrigger RoutedEvent="MouseEnter">
                                <BeginStoryboard>
                                    <Storyboard>
                                        <DoubleAnimation Duration="0:0:0.500" Storyboard.TargetProperty="Width" To="300"/>
                                        <DoubleAnimation Duration="0:0:0.500" Storyboard.TargetProperty="Height" To="80"/>
                                    </Storyboard>
                                </BeginStoryboard>
                            </EventTrigger>
                        </Style.Triggers>
                    </Style>
                </Button.Style>
            </Button>

            <Button Content="Common Factor" FontSize="32" Foreground="White" Background="#FF3399FF" Width="250" Height="60" Margin="20"/>
            <Button Content="Common Factor" FontSize="32" Foreground="White" Background="#FF3399FF" Width="250" Height="60" Margin="20"/>
c# wpf xaml
2个回答
1
投票

您可以将样式存储在任何资源字典对象中,例如App.xaml中的MergedDictionaryWindow.Resources

<Window.Resources>
                <Style TargetType="Button" x:Key="myStyle">
                    <Style.Triggers>
                        <EventTrigger RoutedEvent="MouseEnter">
                            <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimation Duration="0:0:0.500" Storyboard.TargetProperty="Width" To="300"/>
                                    <DoubleAnimation Duration="0:0:0.500" Storyboard.TargetProperty="Height" To="80"/>
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger>
                    </Style.Triggers>
                </Style>
</Window.Resources>

并通过创建StaticResource类型的对象来重用它:

<Button Style="{StaticResource myStyle}" Content="Common Factor" FontSize="32" Foreground="White" Background="#FF3399FF" Width="250" Height="60" Margin="20"/>
<Button Style="{StaticResource myStyle}" Content="Common Factor" FontSize="32" Foreground="White" Background="#FF3399FF" Width="250" Height="60" Margin="20"/>
<Button Style="{StaticResource myStyle}" Content="Common Factor" FontSize="32" Foreground="White" Background="#FF3399FF" Width="250" Height="60" Margin="20"/>

2
投票

[回答您的问题

您可以像这样在Style中声明ResourceDictionary

<Window.Resources>
    <Style TargetType="Button" x:Key="MyButtonStyle">
        <Style.Triggers>
            <EventTrigger RoutedEvent="MouseEnter">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Duration="0:0:0.500" Storyboard.TargetProperty="Width" To="300"/>
                        <DoubleAnimation Duration="0:0:0.500" Storyboard.TargetProperty="Height" To="80"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

通过给它一个密钥(在这里为"MyButtonStyle"),您可以使用StaticResource标记从其他地方引用它:

<Button Style="{StaticResource MyButtonStyle}" Content="Common Factor" FontSize="32" Foreground="White" Background="#FF3399FF" Width="250" Height="60" Margin="20"/>
<Button Style="{StaticResource MyButtonStyle}" Content="Common Factor" FontSize="32" Foreground="White" Background="#FF3399FF" Width="250" Height="60" Margin="20"/>
<Button Style="{StaticResource MyButtonStyle}" Content="Common Factor" FontSize="32" Foreground="White" Background="#FF3399FF" Width="250" Height="60" Margin="20"/>

要进一步使用样式

注意,如果您没有通过删除Style标记为x:Key="MyButtonStyle"指定显键,则Style将自动应用于所有Controls,而无需设置显式的Style属性。例如,如下定义的Style

<Window.Resources>
    <Style TargetType="Button">
        <Style.Setters>
            <Setter Property="Background" Value="Red"/>
        </Style.Setters>
    </Style>
</Window.Resources>

将自动应用于[c0]中没有epxlicit Buttons属性的所有Window

© www.soinside.com 2019 - 2024. All rights reserved.