Ответ 1
Нет визуальной группы, которая сделала бы это возможным.
Настройка свойств видимости, напрямую или в общем стиле, разделяемом всеми текстовыми блоками, является, пожалуй, самым простым решением.
Здесь сценарий
У меня есть сетка с некоторыми элементами управления TextBlock, каждая из которых находится в отдельной ячейке в сетке. Логически я хочу, чтобы можно было установить видимость на них, привязанных к свойству в моей модели ViewModel. Но поскольку они находятся в отдельной ячейке в сетке, я должен установить каждое свойство видимости TextBlock.
Есть ли способ иметь визуальную группу, на которой я могу установить общие свойства своих детей? Или мне снится?
Нет визуальной группы, которая сделала бы это возможным.
Настройка свойств видимости, напрямую или в общем стиле, разделяемом всеми текстовыми блоками, является, пожалуй, самым простым решением.
Другим вариантом является привязка свойства видимости каждого элемента в вашей группе элементов к одному элементу, таким образом, в вашем коде позади вас только когда-либо нужно установить видимость одного элемента.
Надеюсь, вы определили все элементы пользовательского интерфейса вашей ячейки внутри DataTemplate. Вы можете сделать небольшой трюк на уровне ViewModel, чтобы достичь того, что вы ищете.
Привязать свойство Singleton в XAML и управлять этим свойством из любого места вашего приложения.
< TextBlock Visibility = "{Binding Source = {x: Статический локальный: Singleton.Instance}, Path = Visibility}"
И простой класс Singleton может быть реализован как
public class Singleton :INotifyPropertyChanged
{
private Singleton() { }
public static Singleton Instance
{
get
{
if (instance == null){ instance = new Singleton(); }
return instance;
}
}
private Visibility _visibility;
public Visibility Visibility
{
get { return _visibility; }
set
{
_visibility = value;
PropertyChanged( this, new PropertyChangedEventArgs("Visibility") );
}
}
public event PropertyChangedEventHandler PropertyChanged;
private static Singleton instance;
}
Теперь вы можете управлять Singleton.Instance.Visibility = Visibility.Collapsed в любом месте вашего кода за
Возможно, вы сможете создать настраиваемый элемент управления, который перенаправляет все свои методы добавления/удаления детей в свой собственный родитель, сохраняя при этом запись своего содержимого, чтобы он мог применять свои собственные стили свойств. Было бы сложно.
Если возможно, я по большей части размещаю их в GroupBox и устанавливаю для группового поля BorderThickness значение 0. Таким образом, все элементы управления сгруппированы, вы не видите, что это групповой пакет, и вы можете установить видимость с одним свойством.
<Style TargetType="{x:Type GroupBox}"
x:Key="HiddenGroupBox">
<Setter Property="BorderThickness"
Value="0" />