Использование пользовательских свойств зависимостей в качестве DataTrigger в WPF - PullRequest
4 голосов
/ 04 января 2010

У меня есть собственное свойство зависимости, которое я хотел бы использовать в качестве триггера данных. Вот код:

public static readonly DependencyProperty BioinsulatorScannedProperty =
    DependencyProperty.Register(
        "BioinsulatorScanned", 
        typeof(bool), 
        typeof(DisposablesDisplay), 
        new FrameworkPropertyMetadata(false));

    public bool BioinsulatorScanned
    {
        get
        {
            return (bool)GetValue(BioinsulatorScannedProperty);
        }
        set
        {
            SetValue(BioinsulatorScannedProperty, value);
        }
    }

Я создал шаблон стиля и управления. Моя цель состоит в том, чтобы изменить цвет некоторого текста, когда свойство зависимости установлено в true ...

<Style x:Key="TreatEye" TargetType="Label">
        <Setter Property="Foreground" Value="#d1d1d1" />
        <Setter Property="FontWeight" Value="Bold" />
        <Setter Property="FontSize" Value="30" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Label">
                    <Canvas>                            
                        <TextBlock x:Name="bioinsulatorText" 
                                   Canvas.Left="21" Canvas.Top="33" 
                                   Text="Bioinsulator" />
                        <TextBlock Canvas.Left="21" Canvas.Top="70" 
                                   Text="KXL Kit" />
                    </Canvas>

                    <ControlTemplate.Triggers>
                        <DataTrigger Binding="{Binding BioinsulatorScanned}"
                                     Value="True">
                            <Setter TargetName="bioinsulatorText" 
                                    Property="Foreground" Value="Black" />
                        </DataTrigger>
                    </ControlTemplate.Triggers>

                </ControlTemplate>
            </Setter.Value>
        </Setter>            
    </Style>

Несмотря на то, что успешно установил реквизит зависимостей в true программно, это условие триггера никогда не срабатывает Это настоящая боль для отладки!

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 01 февраля 2012

В этом случае я переключаю видимость кнопки с помощью устройства сбора данных на основе свойства зависимости FirstLevelProperty.

public static readonly DependencyProperty FirstLevelProperty = DependencyProperty.Register("FirstLevel", typeof(string), typeof(MyWindowClass));

public string FirstLevel
        {
            get
            {
                return this.GetValue(FirstLevelProperty).ToString();
            }

            set
            {
                this.SetValue(FirstLevelProperty, value);
            }
        }

Вы можете ссылаться на свойство зависимости FirstLevel(Property), содержащееся (в данном случае) вокно с помощью привязки RelativeSource.Также вам следует установить настройку по умолчанию в стиле, которая будет переопределена датгергером.

<Button.Style>
    <Style TargetType="Button">
        <Style.Triggers>
            <DataTrigger 
             Binding="{Binding Path=FirstLevel,
             RelativeSource={RelativeSource FindAncestor,
             AncestorType={x:Type Window}}}" 
             Value="SomeValue">
                <Setter Property="Visibility" 
                 Value="Hidden" />
             </DataTrigger>
        </Style.Triggers>
        <Setter Property="Visibility" Value="Visible" />
    </Style>
</Button.Style>
2 голосов
/ 05 января 2010

Похоже, что ваше свойство зависимости определено внутри DisposableDisplay объекта, который вы создали. Чтобы указанная привязка работала, экземпляр этого DisposableDisplay объекта должен быть установлен как DataContext элемента управления (в данном случае метка) или любого из его предков.

...