我创建了UserControl并编写了ResourcesDictionary。有一些样式。
我想将ResourceDictionary合并到App.xaml中。
但主要项目是A,并且有App.xaml。
UserControl在B项目中,所以他们住在另一个地方。
如何合并ResourceDictonary?
这是我的代码的一部分,但它不起作用。
首先尝试使用App.xaml
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="myUserControl.xaml"/>
</ResourceDictionary.MergedDictionaries> ......
第二次尝试
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/B;component/SubFolderName/myUserControl.xaml" />
</ResourceDictionary.MergedDictionaries> ......
第三次尝试
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/B;component/SubFolderName/myUserControl.xaml" />
</ResourceDictionary.MergedDictionaries> ......
他们都没有工作.....
+ myUserControl.xaml
<UserControl x:Class="........."
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:B"
DataContext="{Binding RelativeSource={RelativeSource Self}}"
mc:Ignorable="d" d:DesignWidth="300" d:DesignHeight="100">
<UserControl.Resources>
<ResourceDictionary>
<Style x:Key="TitleTest" TargetType="TextBlock" BasedOn="{StaticResource MetroTextBlock}">
<Setter Property="Margin" Value="15"/>
<Setter Property="VerticalAlignment" Value="Top"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="FontSize" Value="20"/>
</Style>
<Style x:Key="PanelTestStyle" TargetType="StackPanel">
<Setter Property="ClipToBounds" Value="True"/>
<Setter Property="Height" Value="55"/>
<Setter Property="VerticalAlignment" Value="Bottom"/>
<Setter Property="Margin" Value="15"/>
</Style>
<Style x:Key="TestStyle2" TargetType="TextBlock" BasedOn="{StaticResource MetroTextBlock}">
<Setter Property="VerticalAlignment" Value="Bottom"/>
<Setter Property="HorizontalAlignment" Value="Right"/>
<Setter Property="FontSize" Value="40"/>
</Style>
</ResourceDictionary>
</UserControl.Resources>
<Grid>
<TextBlock Text="{Binding StatusTitle}" Style="{DynamicResource TitleTest}"/>
<StackPanel Style="{StaticResource PanelTestStyle}">
<TextBlock x:Name="testText" Style="{DynamicResource TestStyle2}" Text="{Binding StatusNumber}"/>
<TextBlock x:Name="testText2" Style="{DynamicResource TestStyle2}" Text="TEST" />
</StackPanel>
</Grid>
另外,我想让Setter Value在cs代码中更改FontSize,所以我需要设置DynamicResource(TextBlocks)。
答案 0 :(得分:0)
您必须参考项目&#39; B&#39;在您的项目&#39; A&#39;,然后您的示例&#39; Second Try&#39;应该工作
答案 1 :(得分:0)
您必须将ResourceDictionary放在一个单独的xaml文件中;不在App.xaml中。此文件必须如下所示:
<ResourceDictionary>
<Style x:Key="TitleTest" TargetType="TextBlock" BasedOn="{StaticResource MetroTextBlock}">
<Setter Property="Margin" Value="15"/>
<Setter Property="VerticalAlignment" Value="Top"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="FontSize" Value="20"/>
</Style>
...
如果要在同一个dll中使用此ResourceDictionary,可以使用第一次尝试的代码访问它。如果你想在另一个dll中使用它,你可以使用第二次尝试的代码访问它。