WPF, Установка свойства с одним значением в нескольких субконтролях - PullRequest
2 голосов
/ 26 апреля 2010

У меня есть родительский контентный контроль, который отображает данные через табличку с данными. Табличка данных содержит панель стека с несколькими пользовательскими контроллерами одного типа. Мне нравится устанавливать свойство только один раз в родительском элементе управления, он должен устанавливать значение свойства во всех элементах управления. Но если есть способ сделать это на панели стека, это тоже нормально. Шаблон может быть изменен во время выполнения, и значения также необходимо распространить на новый шаблон.

Мое текущее решение состоит в том, чтобы реализовать свойство как для родительского, так и для субконтроля и использовать код для передачи значения из родительского во все субконтроли. Мой вопрос: есть ли лучший или другие способы сделать это?

EDIT: Несколько пояснений к моему вопросу. В настоящее время приложение является WPF, но если оно переносимо на silverlight, это будет бонусом. Свойство является зависимостью типа Style.

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

<Parent SubSubStyle="x" Template="template" />

<DataTemplate x:Key=template>
  <StackPanel>
    <Subcontrol SubSubStyle="?"/>
    <Subcontrol SubSubStyle="?"/>
    <Subcontrol SubSubStyle="?"/>
    <Subcontrol SubSubStyle="?"/>
  </StackPanel>
</DataTemplate>

Ответы [ 2 ]

1 голос
/ 26 апреля 2010

Является ли свойство, которое вы пытаетесь установить DependencyProperty, которое вы создали? Если это так, то в WPF лучше всего определить свойство так, чтобы оно было унаследовано элементами в визуальном дереве.

Если это не ваше собственное свойство зависимостей (или если вы используете Silverlight, который не поддерживает этот механизм), вам следует вместо этого использовать неявные стили .

public class MyControl {

    // be prepared for some dependency property hell below
    // this defines a DependencyProperty whose value will be inherited
    // by child elements in the visual tree that do not override
    // the value. An example of such a property is the FontFamily
    // property. You can set it on a parent element and it will be
    // inherited by child elements that do not override it.

    public static readonly DependencyProperty MyInheritedProperty =
        DependencyProperty.Register(
            "MyInherited",
            typeof(string),
            typeof(MyControl),
            new FrameworkPropertyMetadata(
                null,
                FrameworkPropertyMetadataOptions.Inherits
            )
        );

}
0 голосов
/ 26 апреля 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...