2010-09-01 2 views
3

У меня возникли проблемы с расширением одного из моих стилей, которые я определил в словаре Windows. В одиночку, похоже, этот стиль применяется к моим элементам управления, как ожидалось. Однако, если попытаться расширить стиль в одном из моих userControls, используя свойство basedOn, он просто переопределяет основной, и все базовые стили исчезают. Вот пример:Как наследовать/расширять стили из ресурсного словаря?

В словаре ресурсов, названный dict1.xaml:

<Style TargetType="{x:Type Button}"> 
    <Setter Property="Background" Value="Pink"/> 
</Style> 

В главном window.xaml:

<Window.Resources> 
    <ResourceDictionary Source="dict1.xaml"/> 
</Window.Resources> 

В пользовательский элемент управления под названием userControl1.xaml:

<UserControl.Resources> 
    <Style BasedOn="{StaticResource {x:Type Button}}" 
      TargetType="{x:Type Button}"> 
     <Setter Property="FontWeight" Value="Bold"/> 
    </Style> 
</UserControl.Resources> 

Стиль в пользовательском элементе управления просто переопределяет значение в словаре ресурсов, а шрифт - Bo смертельная доза Если я удалю стиль в пользовательском элементе управления, стиль словаря начнется, и фон станет розовым. Я хочу оба.

Любые идеи, что я делаю неправильно здесь?

спасибо.

ответ

1

Вам либо нужно добавить словарь в ресурсы UserControl, либо добавить его в ресурсы App.XAML.

Как бы то ни было, UserControl не может разрешить этот StaticResource - он находится в области UserControl, а не в окне, если это имеет смысл.

+0

Да, это имеет смысл. Когда вы говорите, добавьте его в app.xaml, что он достигнет? Не добавляет ли он в Windows.Resources то же самое? BTW, файл app.xaml не используется в моей настройке, потому что форма окна открывается из приложения winforms, но это еще одна проблема. – HAdes

+0

@HAdes Добавление его в App.XAML делает его доступным во всем приложении, поэтому вы можете ссылаться на его ресурсы из любого места. – Jay

+0

Итак, кажется, что то, что я за ним, невозможно, и единственный способ сделать это, как вы предлагаете, и скопировать стиль в пользовательский элемент управления. Мне это не нравится, потому что он дублирует стили без необходимости и означает любые изменения стиля, которые нужно выполнять в обоих. Но я предполагаю, что это работает пока. веселит. – HAdes

Смежные вопросы