У меня есть сложное окно с различными элементами управления, которые видны или свернуты в зависимости от логических значений. Я хочу добавить пользовательский атрибут, чтобы отображать все эти элементы управления во время разработки. Моя реализация атрибута выглядит так:
public static class CustomAttributes
{
private static bool? _inDesignMode;
public static readonly DependencyProperty Visibility = DependencyProperty.RegisterAttached(
"Visibility",
typeof(Visibility),
typeof(CustomAttributes),
new PropertyMetadata(VisibilityChanged));
private static bool InDesignMode
{
get
{
if (!_inDesignMode.HasValue)
{
var prop = DesignerProperties.IsInDesignModeProperty;
_inDesignMode =
(bool)DependencyPropertyDescriptor.FromProperty(prop, typeof(FrameworkElement)).Metadata.DefaultValue;
}
return _inDesignMode.Value;
}
}
public static Visibility GetVisibility(DependencyObject dependencyObject)
{
return (Visibility)dependencyObject.GetValue(Visibility);
}
public static void SetVisibility(DependencyObject dependencyObject, Visibility value)
{
dependencyObject.SetValue(Visibility, value);
}
private static void VisibilityChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (!InDesignMode)
return;
d.SetValue(Control.VisibilityProperty, e.NewValue);
}
}
В XAML я использую это так:
<Button Visibility="{Binding SomeBoolValue, Converter={StaticResource BoolToVisibility}}"
helper:CustomAttributes.Visibility="Visible"
/>
Однако, похоже, это не работает. Я использую некоторые другие настраиваемые атрибуты, подобные этому, и они выполняют свою работу, но видимость не срабатывает, она просто остается свернутой в представлении дизайна. Что мне не хватает?
Редактировать:
Спасибо, что указали мне правильное направление. Решение моей проблемы не требовало пользовательского атрибута, как я сначала предполагал. Чтобы добиться желаемого поведения во время разработки, я изменил реализацию преобразователя, как это предлагается в принятом ответе ниже.
Visibility
только из помощника, привязатьbool
к дополнительному свойствуhelper:CustomAttributes
и установитьVisible
только тогда, когда два свойства имеют значение true/Visible. - person Genusatplay   schedule 27.05.2021