【问题标题】:Datatrigger Change ImageBrush sourceDatatrigger 更改 ImageBrush 源
【发布时间】:2015-07-24 17:09:26
【问题描述】:

目前正在开发一个黑白棋游戏,这是板上石头的 ControlTemplate,我正在使用 DataTrigger 来查看石头的所有者是谁,以便将按钮设置为适当的图像,但是当我使用 TargetName 时二传手(到 imagebrush 至极是 imga)。我收到一个错误“找不到触发器目标'imga'。(目标必须出现在任何使用它的设置器、触发器或条件之前。)”

但是由于我在我的二传手之前宣布了这个画笔,这对我来说似乎真的很奇怪。此代码位于 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>

【问题讨论】:

    标签: wpf xaml controltemplate datatrigger


    【解决方案1】:

    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>
    

    【讨论】:

    • 有可能知道我的回答有什么问题吗?如果我错了,我想知道...
    猜你喜欢
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    相关资源
    最近更新 更多