Arhn - архитектура программирования

Условный стиль элемента в визуальной структуре

У меня возникли проблемы с созданием универсального решения для следующей проблемы:

Представьте себе пользовательский элемент управления TreeView с тематикой pws — список элементов в отдельном файле xaml, который используется для построения визуальной структуры элемента управления TreeView. Существует элемент границы, который я хотел бы нарисовать на его фоне в зависимости от типа отображаемых данных. Этот элемент границы является частью знака «+» и не отображается через стиль.

Я могу сделать это, используя код позади и подписавшись на некоторые события, которые предоставляет этот элемент управления, а затем найти эту границу в дочерних элементах и ​​изменить ее фон. Однако этот код будет повторяться во многих представлениях, иногда точно так же, иногда с небольшими изменениями (например, проверяется тип только другого элемента данных).

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

Редактировать:

в настоящее время у меня есть элемент управления oqwn, который наследует этот элемент управления, если вы обнаружите, что это можно сделать с помощью свойств прикрепленных/зависимых:

public class MyTreeView : CustomTreeView
{
}

Если бы мне нужно было указать фон для строки, я бы создал селектор стиля:

<local:ProductRowtyleSelector x:Key="productRowStyleSelector"
                              DefaultStyle="{StaticResource defaultProductRowStyle}"
                              GoodStyle="{StaticResource goodProductRowStyle}"
                              ScrapStyle="{StaticResource reworkProductRowStyle}" />

Где GoodStyle наследует стиль для строки, которая существует в шаблоне элемента управления. Таким образом, я бы использовал выбор стиля везде, где я отображаю список продуктов.

Есть ли аналогичный способ сделать то же самое для элемента Border, который я добавил в шаблон управления?

19.10.2012

Ответы:


1

Изменить

Хорошо, если я получу то, что вам нужно, вы можете попробовать это

Создайте IsTypeOf IValueConverter следующим образом:

public class IsTypeOfConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        Type parameterType = parameter as Type;
        if (parameterType == null)
            throw new ArgumentException();

        return parameterType.IsAssignableFrom(value.GetType());
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

Затем в вашем xaml поместите DataTrigger в применимый стиль

<DataTrigger Binding="{Binding Converter={StaticResource IsKindOfConverter}, ConverterParameter={x:Type Person}}">
    <Setter Property="Backgroud" Value="Red" />
</DataTrigger>
19.10.2012
  • Привет, Сизиф, я не хочу делать это на разных элементах управления, я уже унаследовал пользовательское древовидное представление, и я хотел бы сделать это оттуда, если это возможно. Кроме того, эту логику необходимо применять на уровне строк, которые являются частью коллекции элементов. 19.10.2012
  • Хорошо, извините, я полностью упустил суть. Итак, вы хотите просмотреть визуальное дерево в поисках определенного элемента, над которым нужно поработать? 19.10.2012
  • Привет, Сизиф! Что я сделал, так это добавил в тему один элемент Border (x:Name=MyBorder) (тема — это файл xaml, в котором создается визуальная структура для этого элемента управления списком. Представьте, что этот элемент управления списком привязан к List‹Customer›. В коде позади, всякий раз, когда строка загружается в этот элемент управления списком, я нахожу дочерний элемент по имени MyBorder и устанавливаю его фон на основе свойства Type клиента, А теперь представьте, что я копирую и вставляю этот код в каждое представление, где У меня есть List‹Customer›, также у меня есть List‹Product›, а Product также имеет свойство Type.. вы получаете изображение. 19.10.2012
  • Я думал найти способ сделать какой-нибудь конвертер, или селектор стилей, или селектор шаблонов, где я мог бы повторно использовать это в каждом представлении. Проблема с StyleSelector заключается в том, что при его запуске визуальная структура еще не построена. Поэтому в этом вопросе я прошу любую идею, как сделать это многоразовым (без создания статического класса и перемещения кода из кода туда). 19.10.2012
  • Итак, вы хотите установить другой цвет фона для строк в Listbox в зависимости от типа объекта DataContext, верно? 19.10.2012
  • давайте продолжим обсуждение в чате 19.10.2012
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..