Как переместить DataTemplate управления контентом в словарь XML ресурсов - PullRequest
0 голосов
/ 29 сентября 2011

Мне дали отличный пример того, как применить динамический стиль в Контент-контроле.

Я знаю, что мой 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>

Но тогда я получаю сообщение об ошибке «Свойство ресурсов уже установлено».

Что я делаю не так?

Бен

...