WPF在控件之间共享资源

时间:2011-04-05 15:13:59

标签: wpf resourcedictionary

我在我的WPF应用程序中合并了2个词典(基本词典与皮肤词典合并)。 它在MainWindow上工作得非常好,但是当我添加一个新的WPF窗口时,它似乎无法访问StaticResource。

这是新窗口的代码:

<Window x:Class="Sc2ReplayMonkey.PleaseWaitWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
        xmlns:local="clr-namespace:Sc2ReplayMonkey"
        Title="PleaseWaitWindow" Height="300" Width="300">
    <Grid Style="{StaticResource WindowBackground}">
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <TextBlock Style="{StaticResource WindowTextelement}" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center">
            Please wait while the replays            
        </TextBlock>
        <TextBlock Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center">
            are parsed and serialized
        </TextBlock>
    </Grid>
</Window>

我收到错误“无法找到名为”WindowBackground“的资源”。 它在皮肤词典中被定义为:

<Style x:Key="WindowBackground" TargetType="{x:Type Grid}">
    <Setter Property="Background" Value="Black" />
</Style>

我错过了什么?

2 个答案:

答案 0 :(得分:0)

我认为你需要添加

 Resources.MergedDictionaries.Add(resources); 

在您的App.cs类中,一次是在Initialize()方法中。然后可以从任何窗口访问您的字典。

答案 1 :(得分:0)

这解决了这个问题,我只是在PleaseWaitWindow的构造函数中添加了一行:Resources = main.Resources;主要是MainWindow