如何在触发器中使用属性后面的代码来更改控件属性?

时间:2010-03-23 16:15:12

标签: wpf xaml properties triggers

我试图在我的WPF应用程序中做一个相当简单的事情,或者至少我觉得它很简单。

我有一个Window,后面的代码中包含一个int属性。我们称之为IntProperty。 Window实现了INotifyPropertyChanged接口,IntProperty在更改时触发通知。它看起来像这样:

        public int IntProperty
    {
        get
        {
            return intProperty;
        }

        private set
        {
            if (value != intProperty)
            {
                intProperty = value;
                NotifyPropertyChanged("IntProperty");
            }
        }
    }

在xaml文件中,我定义了一个在Fill属性中设置了特定颜色的Rectangle。

                    <Rectangle x:Name="MyRectangle" Fill="Red" Width="100" Height="5" Margin="3,0,0,0" VerticalAlignment="Center" />

我现在要做的是根据IntProperty的值设置Fill属性。 我正在寻找一些简单的xaml线来触发这种变化。

它看起来应该是这样的(AppWindow是Window的名称):

<Rectangle x:Name="MyRectangle" Fill="Red" Width="100" Height="5" Margin="3,0,0,0" VerticalAlignment="Center">
<Rectangle.Triggers>
    <Trigger SourceName="AppWindow" Property="IntProperty" Value="1">
        <Setter TargetName="MyRectangle" Property="Fill" Value="Green" />
    </Trigger>
</Rectangle.Triggers>

有没有简单的方法可以做到这一点?到目前为止,我找不到任何简单的解决方案。如果有人能指出我正确的方向,我将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:5)

您需要使用DataTrigger

<Rectangle x:Name="MyRectangle" Fill="Red" Width="100" Height="5" Margin="3,0,0,0" VerticalAlignment="Center">
    <Rectangle.Triggers>
        <DataTrigger Binding="{Binding IntProperty}" Value="1">
            <Setter TargetName="MyRectangle" Property="Fill" Value="Green" />
        </Trigger>
    </Rectangle.Triggers>
</Rectangle>