Сплит файлы в стиле WPF XAML - PullRequest
0 голосов
/ 12 марта 2010

Большинство стилей WPF, которые я видел, разбиты на один очень длинный файл Theme.xaml. Я хочу разделить мой для удобства чтения, поэтому мой Theme.xaml выглядит так:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="/PresentationFramework.Aero;v3.0.0.0;31bf3856ad364e35;component/themes/aero.normalcolor.xaml"/>
        <ResourceDictionary Source="Controls/Brushes.xaml"/>
        <ResourceDictionary Source="Controls/Buttons.xaml"/>
        ...
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

Проблема в том, что это решение не работает. У меня есть стиль кнопки по умолчанию, который основан на стиле Aero по умолчанию для кнопки:

<Style x:Key="{x:Type Button}" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}">
    <Setter Property="FontSize" Value="14"/>
    ...
</Style>

Если я помещаю все это в один файл, он работает, но как только я делю его, я получаю исключения StackOverflow, потому что он думает, что это сам BasedOn. Это можно обойти? Как WPF добавляет ресурсы при объединении словарей ресурсов?

Ответы [ 2 ]

0 голосов
/ 13 марта 2010

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

0 голосов
/ 12 марта 2010

Если оба стиля будут применяться всегда, почему бы не изменить ключ на меньший стиль (тот, который переопределяется позже)? Затем вы будете ссылаться на более позднюю по этому ключу, а не {StaticResource {x:Type Button}}. Это должно решить проблему с определением базового типа. Это также решит потенциальную проблему со стилями, применяемыми в неправильном порядке (например, если вы переопределите одно свойство несколько раз, порядок применения этих словарей приведет к различным результатам).

Пока последний стиль потомка имеет правильный ключ, суммирование должно применяться правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...