我已经获得了如何在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>
但后来我收到错误“已经设置了资源属性”。
我做错了什么?
本