WPF ResourceDictionary和DynamicResource

时间:2011-12-13 22:50:58

标签: wpf xaml resourcedictionary

我是WPF的新手所以也许这将是“noob”问题,但我找不到答案(而且看起来很容易)......

我正在编写WPF应用程序,我想使用类似于css的smth用于网页,所以我找到了ResourceDictionary并尝试使用它...

我有一个主窗口,我在其中创建Frame,然后单击一些UserControl加载到同一个Frame.I包括我的ResourceDictionary(root / style / Styles.xaml)到我的主窗口,如下所示:

<Window.Resources>
    <ResourceDictionary x:Key="styles" Source="style/Styles.xaml" />
</Window.Resources>  

我有:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<Style x:Key="ProductsRequired" TargetType="{x:Type Label}">
    <Setter Property="Height" Value="28" />
    ...

我不在我的主窗口上使用它,但是想在我的UserControls上使用它,它们被加载到那个主窗口,我试着像这样使用它:

<Label Name="product1" Style="{DynamicResource ProductsRequired}"  />

警告我总是得到:资源“ProductsRequired”无法解决。

我甚至尝试将样式包含在我的UserControl中

<UserControl.Resources>
  <ResourceDictionary x:Key="styles" Source="../style/Styles.xaml" />
</UserControl.Resources>

没有任何反应......

我的问题很长,但我想要清楚......:)

P.S。所有这些逻辑都适用于C#代码btw

private ResourceDictionary myStyles = new ResourceDictionary();
Style ProductsRequired = myStyles["ProductsRequired"] as Style;
product1.Style = ProductsRequired;

3 个答案:

答案 0 :(得分:1)

这不行,当你需要将添加到资源时,你将resurce字典添加为资源,它不能像这样被访问。您需要将其添加到MergedDictionaries (有关使用示例,请参阅MSDN!)

答案 1 :(得分:1)

你正在引用正确的装配吗? 例如:

<Page.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/SecurityManagerResources;component/DictionarySecurityResources.xaml"   />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Page.Resources>

答案 2 :(得分:0)

你需要这样做

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="style/Styles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>