Как создать «пользовательское свойство» в стиле WPF, используя чистый WPF (без кода)? - PullRequest
0 голосов
/ 25 июля 2011

Люди

Я работаю над дизайном пользовательского интерфейса в проекте, в котором наша команда решила максимально разделить C # и XAML.

У меня были проблемы с созданием стилей для многих распространенных виджетов (кнопок и т. Д.) И некоторых пользовательских элементов управления, особенно из-за того, что я не хочу / не знаю-как / не должен использовать фоновый код.

То, что я хочу сделать, - это иметь возможность изменять свойства элементов, которые "глубоко внутри" дерева макетов моих UserControls.

Например, предположим, что у меня есть UserControl, который является Border, который содержит StackPanel, который содержит красочный эллипс и другие вещи.

Я хочу иметь возможность создать экземпляр этого пользовательского элемента управления и изменить только цвет эллипса, например:

<MyUserControl Background="Gray" EllipseColor="LightGreen" />

где "EllipseColor" будет некоторым "настраиваемым" свойством, определенным в UserControl.

Я пробовал DependencyProperty в стилях, но безуспешно, хотя я "чувствую", что должен быть простой способ сделать это.

Любая помощь (ссылки, фрагменты кода) будет приветствоваться.

Спасибо за чтение.

1 Ответ

4 голосов
/ 25 июля 2011

Правило «No Code Behind» в MVVM предназначено для того, чтобы полностью отделить View и ViewModel, и не должно использоваться для кода, специфичного для вида, такого как DependencyProperties.Это все равно что сказать: «Построй дом из этих квадратных блоков, но я хочу округлую крышу, а ты не можешь создать свои собственные строительные блоки».Весь смысл DependencyProperties заключается в создании дополнительных свойств для ваших представлений, которые еще не существуют.

Важным моментом является то, что представление напрямую не ссылается на модель представления, и наоборот.

В вашем случае я бы либо создал DependencyProperty в Code Behind для вашего UserControl для EllipseColor, либо использовал что-то вроде Background свойства UserControl и связал бы с этим цвет заливки моего эллипса.

...