Как использовать свойство кода в триггере для изменения свойства элемента управления? - PullRequest
2 голосов
/ 23 марта 2010

Я пытаюсь сделать довольно простую вещь в своем приложении WPF, или, по крайней мере, я думаю, что это просто.

У меня есть окно, которое содержит свойство int в коде позади. Давайте назовем это IntProperty. Окно реализует интерфейс INotifyPropertyChanged, а IntProperty запускает уведомление об изменении. Это выглядит так:

        public int IntProperty
    {
        get
        {
            return intProperty;
        }

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

В файле xaml я определил прямоугольник с указанным цветом, заданным в свойстве Fill.

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

Теперь я хочу установить свойство Fill в зависимости от значения IntProperty. Я ищу несколько простых строк xaml, которые вызывают это изменение.

Это должно выглядеть так (AppWindow - это имя окна):

<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 Ответ

5 голосов
/ 23 марта 2010

Для этого вам понадобится 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>
...