我在app.xaml中添加了自定义命名样式。
我创建了一个外部资源字典(我在app.xaml的合并字典中附加),当我尝试在rcource字典中使用上述命名样式之一时,它表示没有这样的样式。 / p>
默认样式(即适用于整个应用程序的未命名样式)也不适用于模板元素。
注意:模板的构建操作是“页面”。
以下是我的代码编写方式的示例:
<Application x:Class="Application"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
ShutdownMode="OnExplicitShutdown">
<Application.Resources>
<ResourceDictionary>
<Style
x:Key="StackPanelStyle"
TargetType="StackPanel"
BasedOn="{StaticResource {x:Type StackPanel}}">
<Setter Property="Margin" Value="5"/>
<Setter Property="Orientation" Value="Horizontal" />
<Setter Property="Height" Value="40"/>
</Style>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Templates/DataTemplate1.xaml"/>
<ResourceDictionary Source="/Templates/DataTemplate2.xaml"/>
<ResourceDictionary Source="/Templates/DataTemplate3.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
这是数据模板的一个例子:
<DataTemplate DataType="{x:Type Entity}" x:Key="NameDataTemplate">
<Expander>
<StackPanel>
<--The following line produces: StackPanelStyle was not found.-->
<StackPanel Style="{StaticResource StackPanelStyle}">
<Label Content="Name:"/>
<TextBox Text="{Binding Name}"/>
</StackPanel>
</StackPanel>
</Expander>
</DataTemplate>
有什么想法吗? 我是否必须以不同的方式合并字典?
答案 0 :(得分:3)
代码无法正常运行,因为资源字典中的DataTemplate不知道哪个使用它,只是 使用。喜欢好莱坞模式。他们分开编译。
为了使这个工作,您可以将您在app.xaml中的样式放在DataTemplate的同一资源字典中,或者如果您不喜欢这种耦合,您可以将它放在不同的资源字典中,并且将其合并到DataTemplate的资源字典。
答案 1 :(得分:1)
App.xaml的Build Action应该是ApplicationDefinition,资源字典文件的构建操作应该是Page。我猜你有两个都是正确的,因为它们是默认的(我看到你已经提到过关于Page)。
我无法想到你的情况有任何其他问题。只要您的静态资源以正确的顺序定义(它们看起来是正确的顺序),它就应该能够在您运行应用程序时找到它们。
修改强>
调试思路:使用简单的按钮样式创建一个名为“TestDictionary.xaml”的新资源字典。确保此词典与其他词典(DataTemplate1.xaml等)位于同一文件夹中。在MergedDictionaries
中仅添加一个指向TestDictionary的链接(注释掉其他人)。在启动窗口上放置一个按钮并应用样式。看看是否有效。如果失败,您知道合并有问题。如果成功,可能会出现关于DataTemplate
的问题。