C#WPF动态按钮STYLE具有基于x:name或x:key的不同图片

时间:2017-05-02 13:45:33

标签: c# wpf button dynamic styles

我想制作像Shakes& amp;坐立不安。我被卡在主菜单上,我一直在那里过于复杂的东西。我做了一个网格布局,我将按钮放在那里,但每个按钮都是一张图片。 我将ImageBrush 用于我想创建的每个按钮的图片。

我想为每个按钮创建 ONE风格,以便他们根据所拥有的x:Namex:Key更改背景。因此,使用x:Namex:Key“PlayGame”的按钮会发现它是PlayGame.png,PlayGame_HoverPlayGame_OnClick,其中“PlayGame”是变量。 换句话说,我希望有一个样式可以过滤按钮的x:name或x:键,并在以后将其用作变量,所以我可以这样做:{StaticResource VARIABLENAME}

我现在的守则是:

    <ImageBrush x:Key="PlayGame">
        <ImageBrush.ImageSource>
            <BitmapImage UriSource="./Pictures/PlayGameButton.png"/>
        </ImageBrush.ImageSource>
    </ImageBrush>
    <ImageBrush x:Key="PlayGame_Hover">
        <ImageBrush.ImageSource>
            <BitmapImage UriSource="./Pictures/PlayGameButton_Hover.png"/>
        </ImageBrush.ImageSource>
    </ImageBrush>
    <ImageBrush x:Key="PlayGame_OnClick">
        <ImageBrush.ImageSource>
            <BitmapImage UriSource="./Pictures/PlayGameButton_OnClick.png"/>
        </ImageBrush.ImageSource>
    </ImageBrush>

    <Style TargetType="{x:Type Button}">
        <Setter Property="Background" Value="{StaticResource PlayGame}" />
        <Setter Property="FontSize" Value="15" />
        <Setter Property="SnapsToDevicePixels" Value="True" />

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border CornerRadius="4" Background="{TemplateBinding Background}">
                        <Grid>
                            <ContentPresenter x:Name="MyContentPresenter" Content="{TemplateBinding Content}" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,0,0,0" />
                        </Grid>
                    </Border>

                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Background" Value="{StaticResource PlayGame_Hover}" />
                        </Trigger>

                        <Trigger Property="IsPressed" Value="True">
                            <Setter Property="Background" Value="{StaticResource PlayGame_OnClick}" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

1 个答案:

答案 0 :(得分:0)

我找到了一个不太有效的解决方案,但不是我真正想要的解决方案

你可以给Style一个

X:键= “styleKey”

你必须给这个部分按钮:

Style =“{StaticResource styleKey}”

这样你就必须为你想拥有的每个不同的按钮制作一个风格,但它会起作用,如果效率不是关键,你会很高兴。: