Я только что изменил свое приложение WPF от.Net3.5 до.Net4. Выполнение этого заставило все мои глобальные стили прекращать работать. Только стили явно набор с помощью ключа действительно работали. Я провел некоторое исследование и выяснил то, что вызывает это и воспроизвело его в простом приложении.
У меня есть простое приложение WPF, содержащее только кнопку с текстом - никакой стиль или что-либо еще. Я определяю стиль для всех кнопок в ResourceDictionary Приложения. Xaml:
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="Red"></Setter>
</Style>
Моя кнопка является теперь Красной - весь штраф. Я теперь перемещаю это в отдельный ResourceDictionary в отдельном проекте. Это - то, где я хочу держать все свои общие стили. Кнопка является все еще красной, и моя ссылка от App.xaml до SharedStyles.xaml похожа на это:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/StyleLib;component/SharedStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Теперь - я хочу, чтобы SharedStyles.xaml StyleLib содержал все определенные определения стилей, таким образом, я создаю новый файл в том же проекте по имени ButtonStyles.xaml, и я добавляю ресурс там. На самом деле - я добавляю другой стиль также с ключом, который будет использоваться явно (технически, я добавил это позже, таким образом, это не имеет никакого отношения к проблеме, которая происходит).
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="Red"></Setter>
</Style>
<Style x:Key="Explicit" TargetType="{x:Type Button}">
<Setter Property="Background" Value="Blue"></Setter>
</Style>
</ResourceDictionary>
На ButtonStyles.xaml ссылаются от SharedStyles.xaml:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/StyleLib;component/ButtonStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
Теперь - мое кнопочное управление больше не разрабатывается. На самом деле - все еще показано, как разработано в окне предварительного просмотра в VS2010, но когда я запускаю приложение, они не разрабатываются. Если я явно ссылаюсь на стиль с ключом, "Явным", они получают этот стиль - таким образом, файл успешно включен.
Другая забавная вещь состоит в том, что, если я теперь добавляю другой стиль в SharedStyle.xaml - например, глобальный стиль для StackPanel (который был тем, что я попробовал) - затем глобальный стиль в ButtonStyle.xaml волшебно начинает работать..!
Мой вопрос теперь состоит в том, если я делаю что-то не так, или если это походит на ошибку в.Net4? Походит на ошибку мне.. Это действительно работало просто великолепно в.Net3.5!
Я нахожу это очень странным. Это прекрасно работало в .Net3.5, и я не вижу причин, почему это не должно работать сейчас!
Я сообщил об этом как об ошибке в Microsoft. Вы можете просмотреть отчет об ошибке здесь. Когда они подтвердят файл, исходный код решения с изолированной проблемой также должен быть доступен там.