Dies ist ziemlich obskur, ich vermisse nur etwas sehr einfach.Wie WPF-Ressourcen zu anderen Ressourcen-Tags zuweisen
Szenario 1
Lets sagen, dass ich einen Farbverlauf, wie dies in meinem <Window.Resources>
Abschnitt erstellen:
<LinearGradientBrush x:Key="GridRowSelectedBackBrushGradient" StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="#404040" Offset="0.0" />
<GradientStop Color="#404040" Offset="0.5" />
<GradientStop Color="#000000" Offset="0.6" />
<GradientStop Color="#000000" Offset="1.0" />
</LinearGradientBrush>
Dann viel später, möchte ich die HighlightBrushKey
für ein Datagrid zu überschreiben. Ich habe es im Grunde so gemacht (schrecklich);
<LinearGradientBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"
GradientStops="{Binding Source={StaticResource GridRowSelectedBackBrushGradient}, Path=GradientStops}"
StartPoint="{Binding Source={StaticResource GridRowSelectedBackBrushGradient}, Path=StartPoint}"
EndPoint="{Binding Source={StaticResource GridRowSelectedBackBrushGradient}, Path=EndPoint}" />
Dies ist offensichtlich nicht die glatteste Art der Referenzierung einer Ressource. Ich kam auch auf das folgende Problem, das fast identisch ist.
Szenario 2
sagen, dass ich erstellt zwei Farben in meinem <Window.Resources>
Markup, etwa so:
<SolidColorBrush x:Key="DataGridRowBackgroundBrush" Color="#EAF2FB" />
<SolidColorBrush x:Key="DataGridRowBackgroundAltBrush" Color="#FFFFFF" />
Dann später, ich möchte, dass sie in einem Array liefern, die den Converter ernährt sich von eine Bindung, damit ich den benutzerdefinierten Konverter mit meinen statischen Ressourceninstanzen versorgen kann:
<Setter Property="Background">
<Setter.Value>
<Binding RelativeSource="{RelativeSource Mode=Self}"
Converter="{StaticResource BackgroundBrushConverter}">
<Binding.ConverterParameter>
<x:Array Type="{x:Type Brush}">
<SolidColorBrush Color="{Binding Source={StaticResource DataGridRowBackgroundBrush}, Path=Color}" />
<SolidColorBrush Color="{Binding Source={StaticResource DataGridRowBackgroundAltBrush}, Path=Color}" />
</x:Array>
</Binding.ConverterParameter>
</Binding>
</Setter.Value>
</Setter>
Was ich habe Es ist der Versuch, eine vorhandene Ressource neu zu referenzieren, aber in meinen Bemühungen habe ich die Ressource tatsächlich neu erstellt und die Eigenschaften so gebunden, dass sie übereinstimmen. Auch dies ist nicht ideal.
Weil ich jetzt dieses Problem mindestens zweimal getroffen habe, gibt es einen besseren Weg?
Danke, Tom
Ja, Ray, das ist es total! Lass mich ein bisschen mit meinem Xaml herumlaufen und ich werde dich wissen lassen, wie es mir geht. Soweit es mich betrifft, ist dies die Antwort! Vielen Dank! – Tom
Ok, da Window.Resources selbst ein ResourceDictionary ist, habe ich einfach meine verpfuschten Ressourcendubletten durch StaticResourceExtension ersetzt und es funktioniert einfach. Das ist Magie, vielen Dank. – Tom
Während dies funktioniert, verursacht es falsche und vorübergehende Compilerfehler: Ein Objekt vom Typ "System.Windows.StaticResourceExtension" kann nicht auf eine Eigenschaft angewendet werden, die den Typ "System.Windows.Media.Color" erwartet. Diese kommen und gehen - manchmal bestehen sie sogar nach einem Build und verschwinden nach dem anderen. –