Ich habe zwei benutzerdefinierte Steuerelemente erstellt, beide von System.Windows.Controls.Button geerbt. Einer heißt XLButton
und der andere ist XLBox
. Sie haben identische XAML styles/Vorlagen in zwei getrennten ResourceDictionary
Objekten in zwei separaten XAML-Dateien und identische Code-Behind-Dateien, außer dass "XLButton" erscheinen in den XLButton
Dateien, in denen "XLBox" erscheint in den XLBox
Dateien und vice versa.Verschieben von zusammengeführten XAML-ResourceDictionaries zu Generic.xaml verursacht Fehler
Ich habe ein einfaches Testfenster mit einer zweireihigen Grid
erstellt. Ich füge die ResourceDictionary
Dateien in das Window.Resources
dieses Testfensters ein und erstelle eine Instanz jedes benutzerdefinierten Steuerelements, eines in der oberen Reihe, eines im unteren Bereich. Das funktioniert gut. Hier ist die XAML des Testfensters:
<Window x:Class="ScratchPadWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:ExLuminaControls"
mc:Ignorable="d"
Title="ScratchPadWindow" Height="118" Width="145">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Styles/XLBox.xaml" />
<ResourceDictionary Source="/Styles/XLButton.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<local:XLBox Content="Hi!"/>
<local:XLButton Grid.Row="1" Content="Yeah!"/>
</Grid>
</Window>
Das funktioniert gut. Aber, wenn ich den ResourceDictionary.MergedDictionaries
Abschnitt Kommentar aus und kopieren Sie sie in ihrer ursprünglichen Form zu Themes\Generic.xaml
, so sieht es wie folgt aus:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:ExLuminaControls"
mc:Ignorable="d">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Styles/XLButton.xaml" />
<ResourceDictionary Source="/Styles/XLBox.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
Ich erhalte eine „orten kann nicht Ressource‚styles/xlbutton.xaml‘Fehler, verbunden mit diese Zeile:
<local:XLBox Content="Hi!"/>
das ist nicht für mich Sinn macht, aber was mehr verwirrend ist, dass das Problem verschwindet, wenn ich im Designer „Disable Projektcode“ klicken
ich bin. Verwenden von Mischung 2 017 Gemeinschaft.
Kann mir jemand helfen, das zu verstehen?
Danke!
Ich fürchte, das macht keinen Unterschied. Es funktioniert immer noch, wenn ich die "ResourceDictionary" -Referenz in die .xaml-Datei des 'Window' setze, aber nicht, wenn ich sie (entweder mit oder ohne den'/ExLuminaControls; Component'-Teil des Pfades) in 'generic 'lege. XAML-Datei. –
Ok, 3 andere zu überprüfen, siehe oben – GCamel
Danke. Dein Pfad hat den Verweis korrigiert, als ich von Blend zu VS wechselte. All diese anderen Dinge sehen gut aus. Das Problem ist anscheinend subtiler, als ich dachte. Der benutzerdefinierte Stil hat immer noch keinen Effekt, wenn er in generic.xaml definiert ist. Wenn ich die Style-Definition direkt in die generic.xaml-Datei verschiebe, hat sie immer noch keine Auswirkungen. Aber wenn ich ein zweites Projekt mache, das bis auf den Namen identisch mit dem ersten ist, kann das zweite Projekt das benutzerdefinierte Steuerelement aus dem ersten Projekt instanziieren, und der Stil in generic.xaml wird angewendet. Keine Ahnung, warum generic.xaml in einem eigenen Projekt nicht anwendbar ist. Markieren Sie Ihre Antwort richtig. –