/ / WPF - Zmiešavací štýl definovaný v slovníku so štýlom definovaným v rodičovskej kontrole - c #, .net, wpf, xaml

WPF - Štýl miešania definovaný v slovníku so štýlom definovaným v nadradenom ovládaní - c #, .net, wpf, xaml

Definujem vlastný vzhľad ovládania tlačidiel v slovníku zdrojov:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="Button" x:Key="BaseButtonStyle">
<Setter Property="Background" Value="Blue"/>
</Style>
</ResourceDictionary>

Potom sa snažím zmeniť štýl v okne, ak sú umiestnené tlačidlá.

<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary.xaml"/>
<ResourceDictionary>
<Style TargetType="Button" BasedOn="{StaticResource BaseButtonStyle}">
<Setter Property="Foreground" Value="Red"/>
</Style>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>

V dizajnéri WPF mám to, čo som očakával. Modré tlačidlo s červeným textom. Ale v run-time oba štýly nie sú použité a tlačidlo má predvolené farby. Ako to vyriešim?

odpovede:

6 pre odpoveď č. 1

Ten dole funguje. Práve som presunul štýl z MergedDictionaries a umiestnil ho na vonkajší ResourceDictionary.

<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>

<Style TargetType="Button" BasedOn="{StaticResource BaseButtonStyle}">
<Setter Property="Foreground" Value="Red"/>
</Style>
</ResourceDictionary>
</Window.Resources>

Vo vašom pôvodnom XAML si nie som istý, prečo ho dizajnér dokázal správne vykresliť, zatiaľ čo runtime WPF to neurobil. Dokumentáciu MSDN hovorí však, že:

Zlúčený ResourceDictionary nemáprvky zdrojov, ktoré sú v ňom definované pri značkovaní. Namiesto toho je zlúčený slovník ResourceDictionary bez definovaných podradených prvkov značky (alebo bez pridania prvkov pomocou kódu), ale s identifikátorom URI určeným pre zdroj.

Môže to mať niečo spoločné.