Подтвердить что ты не робот

Триггер стиля на прикрепленной недвижимости

Я создал свое собственное Attached Property следующим образом:

 public static class LabelExtension
    {
        public static bool GetSelectable(DependencyObject obj)
        {
            return (bool)obj.GetValue(SelectableProperty);
        }
        public static void SetSelectable(DependencyObject obj, bool value)
        {
            obj.SetValue(SelectableProperty, value);
        }
        // Using a DependencyProperty as the backing store for Selectable.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty SelectableProperty =
            DependencyProperty.RegisterAttached("Selectable", typeof(bool), typeof(Label), new UIPropertyMetadata(false));
    }

И затем я пытаюсь создать стиль с триггером, который зависит от него:

<!--Label-->
<Style TargetType="{x:Type Label}">
    <Style.Triggers>
        <Trigger Property="Util:LabelExtension.Selectable" Value="True">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Label}">
                        <TextBox IsReadOnly="True" Text="{TemplateBinding Content}" />
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Trigger>
    </Style.Triggers>
</Style>

Но я получаю исключение во время выполнения:

Cannot convert the value in attribute 'Property' to object of type 'System.Windows.DependencyProperty'.  Error at object 'System.Windows.Trigger' in markup file 

Как я могу получить доступ к значению вложенного свойства в триггере стиля? Я попытался использовать DataTrigger с привязкой RelativeSource, но он не потянул значение.

4b9b3361

Ответ 1

Ваше объявление триггера в порядке, но в объявлении вашего свойства есть сбой. Тип владельца свойства зависимостей должен быть типом, который объявляет его, а не тем типом, к которому вы собираетесь его привязать. Итак:

DependencyProperty.RegisterAttached("Selectable", typeof(bool), typeof(Label)...

необходимо изменить на это:

DependencyProperty.RegisterAttached("Selectable", typeof(bool), typeof(LabelExtension)...
                                                                ^^^^^^^^^^^^^^^^^^^^^^