如何将Content Control DataTemplate移动到字典资源XML

时间:2011-09-29 02:48:10

标签: wpf datatemplate

我已经获得了如何在Conten Control中应用动态样式的一个很好的例子。

我知道每个样式的XAML会变得非常大,我想将DataTemplate拆分为单独的XAML文件(我想是ResourceDictionary的)。我似乎无法让它发挥作用。

<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中引用Key,但很明显它找不到密钥,因为它驻留在一个不同的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>

但后来我收到错误“已经设置了资源属性”。

我做错了什么?

0 个答案:

没有答案