6

我有一个 WPF 窗口,它应该从 XAML 文件加载两个矢量图像。(每个都在一个单独的文件中,以便在表达式设计中进行修改。)

当我在 a 中包含 XAML 文件时MergedDictionary,它工作正常。这是我使用的代码:

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Images/LCCD logo.xaml" />
            <ResourceDictionary Source="Images/LCCD bottom image.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>

<Image Source="{Binding Source={StaticResource LCCDlogo}}" /> <!-- Simplified -->
<Image Source="{Binding Source={StaticResource LCCDbar}}" /> <!-- Simplified -->

但是,我现在需要向 Window 的资源添加更多内容。新资源属于这个窗口,所以我们希望它在同一个文件中,而不是包含的文件中。

<Window.Resources>当我在and之间添加以下代码时<ResourceDictionary>,出现以下错误:

代码

<Style TargetType="{x:Type tab:FabTabItem}">
        <Setter Property="Header" Value="{Binding Path=LabelText}"/>
        <Setter Property="HeaderTemplate">
            <Setter.Value>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" Margin="0,0,4,0">
                        <TextBlock Text="{Binding}" TextTrimming="CharacterEllipsis"/>
                    </StackPanel>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>

警告

设计器不支持加载将没有键的“ResourceDictionary”项目与同一集合中的其他项目混合的字典。请确保“Resources”属性不包含没有键的“ResourceDictionary”项,或者“ResourceDictionary”项是集合中的唯一元素。

所以我把<ResourceDictionary>标签改成这样:

<ResourceDictionary x:Key="Images">

但是,我现在不知道如何访问此词典中的资源。你如何从一个命名的内部获取资源ResourceDictionary


编辑

没关系。这编译但不运行。

错误是:

''Resources' 属性已在 'MainWindow' 上设置。

我想我必须以其他方式来做。

4

2 回答 2

9

根据MergedResourceDictionary 上的 MSDN 页面,在 MergedDictionary 中指定的资源字典中定义资源是合法的,但并不常见。从上面的页面。

在指定为合并字典的 ResourceDictionary 中定义资源是合法的,可以作为指定 Source 的替代方法,也可以作为指定源中包含的任何资源的补充。但是,这不是常见的情况;合并字典的主要场景是合并来自外部文件位置的资源。如果要在页面的标记中指定资源,通常应该在主 ResourceDictionary 而不是合并字典中定义这些资源。

所以试试这个,看看它是否有效。

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Images/LCCD logo.xaml" />   
            <ResourceDictionary Source="Images/LCCD bottom image.xaml" />
            <ResourceDictionary>
                <Style TargetType="{x:Type tab:FabTabItem}">
                    <Setter Property="Header" Value="{Binding Path=LabelText}"/>
                    <Setter Property="HeaderTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal" Margin="0,0,4,0">
                                    <TextBlock Text="{Binding}" TextTrimming="CharacterEllipsis"/>
                                </StackPanel>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>
于 2012-06-07T02:10:55.253 回答
1

我最终将<Style>文件进一步向下移动到使用该样式的元素的父元素上。

这不是最好的解决方案,但它有效。

于 2012-06-07T01:54:51.970 回答