WPF / Silverlight: шаблонный пользовательский элемент управления ЧАСТИЧНО - PullRequest
6 голосов
/ 01 декабря 2010

.

Привет, ребята,

Можем ли мы написать наши пользовательские элементы управления таким образом, чтобы в дальнейшем мы могли повторно шаблонировать его частично ?Значит, без замены всего ControlTemplate , мы хотим изменить / переопределить некоторые его внешнего вида?

Один из способов, конечно, заключается в следующем: скопироватьКод ControlTemplate из generic.xaml, частично измените его внешний вид и используйте его в своем xaml, как показано ниже:

<MyCustomControl>
       <MyCustomControl.Template>
              <ControlTemplate>

                    <!-- paste the copied and modified code from generic.xaml here-->

              </ControlTemplate>
        </MyCustomControl.Template>

        <!--other code-->

</MyCustomControl>

Но проблема с этим подходом состоит в том, что мы делаем наш xaml слишком многословно .И мне это серьезно не нравится.Я ищу решение, которое может уберечь меня от загрязнения xaml, где я использую свой пользовательский элемент управления.

Спасибо в ожидании!

.

Ответы [ 3 ]

1 голос
/ 01 декабря 2010

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

Однако вы можете определить несколько словарей ресурсов и использовать <ResourceDictionary.MergedDictionaries> для отделения разметки от шаблонов элементов управления.

Ваша разметка xaml будет намного чище и будет выглядеть примерно так:

 <Style>
        <Setter Property="Template" Value="{StaticResource SomeRandomTemplate}" />
 </Style>
1 голос
/ 02 декабря 2010

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

Если вы пишете свой собственный пользовательский элемент управления, вы можете сделать его более гибким, зачем сочинять или предлагать возможность создавать шаблоны элементов управления.В качестве примера вы можете взглянуть на более новый элемент управления WPF DataGrid, который имеет возможность шаблонировать различные части элемента управления.Другие заголовочные элементы управления контентом часто имеют отдельный шаблон для содержимого и часть заголовка элемента управления, позволяющую заменить один, но не другой.

1 голос
/ 01 декабря 2010

К сожалению, изменение шаблона элемента управления - это предложение «все или ничего». Как вы указали, ваш XAML становится очень многословным, когда вы изменяете сложный шаблон элемента управления.

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

У вас есть возможность многократного использования стилей с помощью свойства Style.BasedOn . К сожалению, это не решит вашу проблему.

...