Datatrigger更改ImageBrush源

时间:2015-05-13 12:10:09

标签: wpf xaml controltemplate datatrigger

目前我正在开发一款逆转游戏,这是主板上的Stone的ControlTemplate,我使用DataTrigger来查看所有者是Stone用于将按钮设置为适当的图像,但是当我使用TargetName时二传手(对于图像刷是imga)。我收到错误"找不到触发器目标' imga'。 (目标必须出现在任何使用它的Setter,Triggers或Conditions之前。)"

但是因为我在我的制定者面前宣布这个画笔,这对我来说似乎很奇怪。此代码位于app.xaml资源中。

提前致谢

这是按钮的相关部分

 <Style x:Key="0" TargetType="{x:Type Button}">
        <Setter Property="Foreground" Value="White" />
        <Setter Property="SnapsToDevicePixels" Value="True" />
        <Setter Property="Height" Value="48"/>
        <Setter Property="Width" Value="48" />
         <Setter Property="Template">

            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Ellipse>
                        <Ellipse.Fill x:Uid="filler">
                            <ImageBrush x:Name="imga" ImageSource="afbeeldingen/vuur.jpg"/>

                        </Ellipse.Fill>
                    </Ellipse>

                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Background" Value="#E59400" />

                        </Trigger>

                        <DataTrigger Binding="{Binding Owner.Value.ArrayIndex}" Value="0">
                            <DataTrigger.Setters>

                                <Setter TargetName="imga" Property="ImageSource" Value="afbeeldingen/vuur.jpg" />


                            </DataTrigger.Setters>
                        </DataTrigger>

1 个答案:

答案 0 :(得分:0)

imga不是模板的一部分,它是一种资源,因此您无法从触发器更改其属性。你要做的是改变Ellipse的Fill属性。你会有这样的东西:

<ControlTemplate TargetType="{x:Type Button}">
    <Ellipse x:Name="myEllipse">
        <Ellipse.Fill x:Uid="filler">
            <ImageBrush x:Name="imga" ImageSource="afbeeldingen/vuur.jpg"/>
        </Ellipse.Fill>
    </Ellipse>

    <ControlTemplate.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="#E59400" />
        </Trigger>

        <DataTrigger Binding="{Binding Owner.Value.ArrayIndex}" Value="0">
            <DataTrigger.Setters>
                <Setter TargetName="myEllipse" Property="Fill">
                    <Setter.Value>
                        <ImageBrush x:Name="imga" ImageSource="afbeeldingen/vuur.jpg"/>
                    </Setter.Value>
                </Setter>
            </DataTrigger.Setters>
        </DataTrigger>