DataTemplates в словарях ресурсов не наследуются от стилей app.xaml?

StackOverflow https://stackoverflow.com/questions/1664658

Вопрос

Я добавил стили с собственными именами в app.xaml.

Я создал словарь внешних ресурсов (который прикрепляю к объединенным словарям app.xaml), и когда я пытаюсь использовать один из вышеупомянутых стилей в словаре ресурсов, он говорит, что такого стиля нет.

Также стили по умолчанию (т.безымянные стили, которые применяются ко всему приложению), не применяются к элементам шаблона.

Примечание:Действие сборки шаблонов — «Страница».


Вот пример того, как написан мой код:

<Application x:Class="Application"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    
    ShutdownMode="OnExplicitShutdown">
    <Application.Resources>
        <ResourceDictionary>

            <Style
                    x:Key="StackPanelStyle" 
                    TargetType="StackPanel" 
                    BasedOn="{StaticResource {x:Type StackPanel}}">
                <Setter Property="Margin" Value="5"/>
                <Setter Property="Orientation" Value="Horizontal" />
                <Setter Property="Height" Value="40"/>
            </Style>

            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/Templates/DataTemplate1.xaml"/>
                <ResourceDictionary Source="/Templates/DataTemplate2.xaml"/>
                <ResourceDictionary Source="/Templates/DataTemplate3.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

Это пример шаблона данных:

<DataTemplate DataType="{x:Type Entity}" x:Key="NameDataTemplate">
    <Expander>
        <StackPanel>
            <--The following line produces: StackPanelStyle was not found.-->
            <StackPanel Style="{StaticResource StackPanelStyle}">
                <Label Content="Name:"/>
                <TextBox Text="{Binding Name}"/>
            </StackPanel>
        </StackPanel>
    </Expander>
</DataTemplate>

Есть идеи?Нужно ли объединять словари другим способом?

Это было полезно?

Решение

Код не будет работать должным образом, поскольку DataTemplate в словаре ресурсов не знает, какой из них его использует, он просто был использовал.Как в голливудском режиме.Они составлены отдельно.

Чтобы это работало, вы можете поместить свой стиль из app.xaml в тот же словарь ресурсов DataTemplate, или, если вам не нравится эта связь, вы можете поместите его в другой словарь ресурсов и объедините его со словарем ресурсов DataTemplate..

Другие советы

Действием сборки для вашего App.xaml должно быть ApplicationDefinition, а действием сборки для файлов словаря ресурсов должно быть Page.Я предполагаю, что у вас есть оба варианта, потому что они установлены по умолчанию (и я вижу, что вы уже упомянули о Пейдже).

Я не могу придумать никакой другой проблемы в вашей ситуации.Если ваши статические ресурсы определены в правильном порядке, в котором они расположены, они смогут найти их при запуске приложения.

Редактировать

Идея отладки:Создайте новый словарь ресурсов под названием «TestDictionary.xaml» с простым стилем кнопок.Убедитесь, что этот словарь находится в той же папке, что и другие ваши словари (DataTemplate1.xaml и т. д.).Поместите ссылку только на TestDictionary. MergedDictionaries (закомментируйте остальные).Поместите кнопку в окно запуска и примените стиль.Посмотрите, сработает ли это.Если это не удается, вы знаете, что у вас возникла проблема со слиянием.Если это удастся, что-то о вашем DataTemplate может быть проблема.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top