如何在wpf中定义样式的参数

时间:2012-10-13 18:51:15

标签: wpf styles

我的应用程序中有几个按钮,我想为它们启用,按下和鼠标悬停时有不同的图像。我在这个网站上发现了这个问题,告诉我如何为一个按钮做这个。

different images for enable and disable states of a button in WPF

但由于我的应用程序上有几个按钮,因此很难为每个按钮编写相同的代码。有没有办法可以定义参数化样式,例如我可以定义我的每个按钮如下:

 <Button ActiveImage=" active image name" DisableImage="disabled image name" style="{StaticResource MyStyle}"/>

缩短了我的xamle?

1 个答案:

答案 0 :(得分:0)

好吧,你可以使用附加属性来做到这一点。您可以在单独的类中定义它们(例如,ButtonHelper),如下所述:http://msdn.microsoft.com/en-us/library/ms749011.aspx#custom

接下来,使您的样式引用附加属性:

<Style TargetType="{x:Type Button}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <StackPanel Orientation="Horizontal" >
                    <Image Name="PART_Image"
                           Source="{Binding (local:ButtonHelper.NormalImageSource),
                                            RelativeSource={RelativeSource Self}}" />
                </StackPanel>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Source"
                                Value="{Binding (local:ButtonHelper.HoverImageSource),
                                                RelativeSource={RelativeSource Self}}"
                                TargetName="PART_Image"/>
                    </Trigger>
                    <!-- and so on -->
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

(代码是从this answer偷来的。)

不要忘记将local类所在的命名空间声明为ButtonHelper