Überschreiben von Ressourcen in XAML

Habe ich folgende UserControl:

<UserControl x:Class="MyControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">

    <UserControl.Resources>
        <SolidColorBrush x:Key="ColorKey" Color="Orange"/>
    </UserControl.Resources>

    <Grid Background="{StaticResource ColorKey}">

    </Grid>
</UserControl>

und ich benutze es so:

<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:OverrideResource"
    Title="MainWindow" Height="350" Width="525">

    <Window.Resources>
        <SolidColorBrush x:Key="OtherColorKey" Color="Blue"/>
    </Window.Resources>

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <local:MyControl Grid.Row="0">
            <local:MyControl.Resources>
                <SolidColorBrush x:Key="ColorKey" Color="Red"/>
            </local:MyControl.Resources>
        </local:MyControl>

        <Grid Grid.Row="1">
            <Grid.Resources>
                <SolidColorBrush x:Key="OtherColorKey" Color="Green"/>
            </Grid.Resources>
            <Grid Background="{StaticResource OtherColorKey}"/>
        </Grid>
    </Grid>
</Window>

Überschreiben von Ressourcen OtherColorKey funktioniert wie ich erwartet; das Gitter ist grün Background. Aber ich möchte zum überschreiben eines Resource verwendet wird, innerhalb der UserControl (ColorKey in meinem Beispiel). Aber ich bin immer Ausnahme:

Element wurde bereits Hinzugefügt. Schlüssel im Wörterbuch: 'ColorKey' - Taste Hinzugefügt wird: 'ColorKey'

Dies ist nur ein Vereinfachtes Beispiel, in der Realität brauche ich es für ein bisschen mehr komplexe Aufgabe. Ich weiß, dass unter anderem DevExpress verwendet ähnlichen Mechanismus für die Anpassung Ihrer Kontrollen (diese sind allerdings nicht verwenden strings als Schlüssel, sondern von Objekten, die von ResourceKey). Aber ich bin nicht in der Lage zu finden, einfachen Beispiel arbeiten zu implementieren, die so etwas auf meiner eigenen.

Vielen Dank für Ihre Hilfe.

InformationsquelleAutor Stalker | 2013-03-06
Schreibe einen Kommentar