Мультипривязка могла бы быть вариантом, но это довольно многословно и потребует преобразователя, который объединяет значения видимости; эти проверки разрешений являются довольно детальными и разбросаны по всей базе кода, поэтому размер кода значительно увеличится, что несколько ухудшит читабельность.
В поисках более чистого решения я создал прикрепленное свойство, которое оценивает разрешение и принудительно устанавливает значение видимости в значение «Свернуто», если разрешение недоступно:
MainWindow.xaml:
Код: Выделить всё
Код: Выделить всё
public partial class MainWindow : Window
{
public MainWindow()
{
DataContext = new ViewModel();
InitializeComponent();
}
}
public class ViewModel : INotifyPropertyChanged
{
public Visibility ButtonVisibility => Visibility.Visible;
public event PropertyChangedEventHandler? PropertyChanged;
}
public static class Permission
{
public static readonly DependencyProperty HideProperty =
DependencyProperty.RegisterAttached(
"Hide",
typeof(bool),
typeof(Permission),
new PropertyMetadata(false, OnHideChanged));
public static bool GetHide(DependencyObject d) => (bool)d.GetValue(HideProperty);
public static void SetHide(DependencyObject d, bool value) => d.SetValue(HideProperty, value);
private static void OnHideChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if ((bool)e.NewValue && d is UIElement element)
element.SetValue(UIElement.VisibilityProperty, Visibility.Collapsed);
}
}

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