Я бы пошел на # 3. Но твой код не совсем правильный. Если вы хотите привязать к свойствам фактического элемента управления, к которому применяется шаблон, вы должны использовать TemplateBinding
. Предположим, у вас есть пользовательский элемент управления со свойством ShowCheckboxes
. Тогда в вашем шаблоне вы должны использовать
<Checkbox Visibility={TemplateBinding ShowCheckboxes,
Converter={StaticResource BooleanToVisibilityConverter}}/>
Обратите внимание, что вам, возможно, придется сослаться или создать соответствующий конвертер.
С другой стороны, если вы используете MVVM, вы можете определить свое свойство control в классе viewmodel. Тогда вы должны использовать {Binding}
.
Кроме того, есть еще один способ контролировать, какие шаблоны применяются.
Вы можете извлечь шаблон для вашего субконтроля из большого шаблона. И скопируйте его, чтобы у вас было два шаблона, которые отличаются тем, как вам нужно.
Затем в основном шаблоне вы можете установить TemplateSelector
для вашего субконтроля в пользовательский класс, который вы будете реализовывать. Посмотрите на http://msdn.microsoft.com/en-us/library/system.windows.controls.datatemplateselector.aspx для большего количества примеров.