DataTemplates в словарях ресурсов не наследуются от стилей app.xaml?
-
12-09-2019 - |
Вопрос
Я добавил стили с собственными именами в 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
может быть проблема.