Контролировать видимость Adorner с помощью свойства? - PullRequest
0 голосов
/ 18 сентября 2011

Может ли Adorner быть скрытым / отображаться в зависимости от значения свойства в классе?

Должен ли я использовать прикрепленные свойства для этой цели?

Если это так, как именно можно контролировать видимость Adorner; мне нужно вручную удалить его / добавить его на слой Adorner в событии OnChanged объекта Dependency?

Это просто очень быстрое представление кода того, что я пытаюсь сделать:

( Примечание : Я даже не уверен, правильно ли это делать. Я хочу, чтобы видимость Adorner контролировалась значением свойства, которое изменяется кодом в моем бизнесе Проблема с Attached Properties заключается в том, что ответственность за обновление значения свойства вместо кода в моем бизнес-домене лежит на контроллере.)

public static class IsValidBehavior
{
    public static readonly DependencyProperty IsValidProperty = DependencyProperty.RegisterAttached("IsValid",
                                                                    typeof(bool),
                                                                    typeof(IsValidBehavior),
                                                                    new UIPropertyMetadata(false, OnIsValidChanged));

    public static bool GetIsValid(DependencyObject obj)
    {
        return (bool)obj.GetValue(IsValidProperty);
    }
    public static void SetIsValid(DependencyObject obj, bool value)
    {
        obj.SetValue(IsValidProperty, value);
    }

    private static void OnIsValidChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
    {
        UIElement element = dependencyObject as UIElement;

        if (element == null)
            return;

        if ((bool)e.NewValue == true)
        {
            // Display the Adorner
        }
        else
        {
            // Hide the Adorner
        }
    }
}

1 Ответ

3 голосов
/ 18 сентября 2011

Ну, если я правильно понял ваш вопрос, в WPF у вас есть 2 способа сделать это, из кода или из XAML. Из кода, вы более или менее уже сделали, в XAML вы можете сделать что-то вроде этого, я думаю:

Visibility="{Binding Path=MyVisibilityVariant, 
       Converter={StaticResource VisibilityConverter}}

Другими словами, связать его с каким-либо свойством. Мое общее предложение: используйте XAML всякий раз, когда можете, рассматривая пару вариантов:

  • Декларация XAML делает программное обеспечение очень масштабируемым, но и более сложным (учитывая ваши возможности или возможности вашей группы, лучше всего выполнить какие-то действия в коде, если не только доступное решение)

  • Учитывайте сроки, потому что при реализации / отладке / исправлении вещей на XAML вы будете тратить больше времени, чем на код.

EDIT

Определение пользовательского Adorder для определения его в XAML

...