Мне дали отличный пример того, как применить динамический стиль в Контент-контроле.
Я знаю, что мой XAML для каждого стиля станет действительно большим, я хотел бы разделитьDataTemplate отключен для разделения файлов XAML (я полагаю, ResourceDictionary's).Я просто не могу заставить его работать.
<ContentControl Content="{Binding MyViewModel}">
<ContentControl.Resources>
<DataTemplate x:Key="DefaultTemplate">
<TextBlock Text="DefaultTemplate" />
</DataTemplate>
<DataTemplate x:Key="TemplateA">
<TextBlock Text="Template A" />
</DataTemplate>
<DataTemplate x:Key="TemplateB">
<TextBlock Text="Template B" />
</DataTemplate>
</ContentControl.Resources>
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Setter Property="ContentTemplate" Value="{StaticResource DefaultTemplate}" />
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedView}" Value="ViewA">
<Setter Property="ContentTemplate" Value="{StaticResource TemplateA}" />
</DataTrigger>
<DataTrigger Binding="{Binding SelectedView}" Value="ViewB">
<Setter Property="ContentTemplate" Value="{StaticResource TemplateB}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
Например, я хочу, чтобы этот шаблон:
<DataTemplate x:Key="TemplateB">
<TextBlock Text="Template B" />
</DataTemplate>
находился в другомФайл XAML (назовем его Test.xaml).
Я попытался создать файл ResourceDictionary и сослаться на ключ в DataTemplate, но, очевидно, он не смог найти ключ, поскольку он находится в другом файле XAML.поэтому я попытался реализовать Merged ResourceDictionary, но VS2010 выдает ошибки - например,
Test.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<DataTemplate x:Key="TemplateB">
<TextBlock Text="Template B" />
</DataTemplate>
с:
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Test.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
Но тогда я получаю сообщение об ошибке «Свойство ресурсов уже установлено».
Что я делаю не так?
Бен