То, что вы пытаетесь выполнить, называется селектором шаблонов.Вы можете прочитать об этом, например, здесь: http://codingbandit.com/Blog/blog/wpf-data-templates-part-4-template-selectors/
Учитывая это, вы будете определять селектор шаблона (см. Свойство ContentTemplateSelector в вашем элементе управления).И его SelectTemplate
метод будет выглядеть примерно так:
public override System.Windows.DataTemplate SelectTemplate(object item, System.Windows.DependencyObject container)
{
ControlTemplate template = null;
ContentPresenter pres = container as ContentPresenter;
try
{
if (value != null)
template = item.useTemplate1 ? pres.FindResource("_templateA") : pres.FindResource("_templateB");
}
catch (Exception ex)
{
Debug.Assert(false, ex.ToString());
}
return toolbar;
}
Обновление: Извините, я упустил из виду, что вы пытаетесь получить ControlTemplate, а селекторы шаблонов используются для выбора DataTemplate,Но я считаю, что ваша задача также может быть достигнута с помощью шаблонов данных.
Если вы все еще хотите использовать ControlTemplate, тогда триггеры - это путь:
<ControlTemplate x:Name="_templateA" x:Key="templateA">
<StackPanel Grid.Column="0" Margin="0,0,5,0">
<Blah />
</StackPanel>
</ControlTemplate>
<ControlTemplate x:Name="_templateB" x:Key="templateB">
<StackPanel Grid.Column="0" Margin="0,0,5,0">
<Blah Blah />
</StackPanel>
</ControlTemplate>
<Style x:Key="MyControlStyle" TargetType="[x:Type Control}">
<Setter Property="Template" Value="{StaticResource templateB}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding useTemplate1}" Value="True">
<Setter Property="Template" Value="{StaticResource templateA}"/>
</DataTrigger>
</Style.Triggers>
</Style>
И вы контролируете:
<ControlA x:Name="_controlA" >
<Control Style="{StaticResource MyControlStyle}" />
</ControlA>