ResourceDictionary не может объединить внешние ResourceDictionaries - PullRequest
0 голосов
/ 18 мая 2011

У меня есть ResourceDictionary Generic.xaml, который состоит из набора других словарей ресурсов, это достигается путем слияния словарей. Если в моем Generic.xaml не определены никакие ресурсы, кроме объединенных словарей, во время выполнения стили не применяются. Однако если я определю какие-либо стили в Gerneric.xaml, все начнет работать правильно.

Так что приведенный ниже пример не работает (это из моего Generic.xaml)

<ResourceDictionary.MergedDictionaries>
   <ResourceDictionary Source="pack://application:,,,/Resources;component/ResourceDictionaries/CommonControls/CommonControlsResources.xaml"/>
</ResourceDictionary.MergedDictionaries>

<!--<Style TargetType="{x:Type ToolTip}"/>-->

А вот и рабочая версия:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="pack://application:,,,/Resources;component/ResourceDictionaries/CommonControls/CommonControlsResources.xaml"/>
</ResourceDictionary.MergedDictionaries>

<Style TargetType="{x:Type ToolTip}"/>

Почему это происходит?

Edit:

Чтобы точно определить проблему, я создал пример решения. Итак, структура проекта следующая:

ProjectA Приложение Windows WPF

ProjectC Библиотека классов, содержащая стили, которые являются общими для всех проектов в папке решения.

Вот проект А:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="pack://application:,,,/ProjectC;component/Themes/ThemeZ.xaml"/>
    </ResourceDictionary.MergedDictionaries>

    <!--<Style TargetType="{x:Type ToolTip}"/>-->
</ResourceDictionary>


    <Application x:Class="MergedResourceDictionaryIssue.App"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 StartupUri="MainWindow.xaml">
        <Application.Resources>
            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary Source="/Themes/Generic.xaml"/>
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
        </Application.Resources>
    </Application>


    <Window x:Class="MergedResourceDictionaryIssue.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <Button/>
        </Grid>
    </Window>

Вот проект C:

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

    <!-- Styles for all our buttons, let make them all red squares -->
    <Style TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <Grid Width="50"
                          Height="50"
                          Background="Red" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

</ResourceDictionary>

И снова, если я раскомментирую код в проекте ResourceDictionary отрисовки, как ожидалось, но в противном случае словарь ресурсов просто игнорируется.

1 Ответ

2 голосов
/ 18 мая 2011

По моему мнению, словарь может содержать только: - объединенные словари - ИЛИ стили

Редактировать: Они обсуждают это здесь Это "известный"проблема и трюк, который вы использовали, это обходной путь.

...