Ich habe seltsames Verhalten beim Referenzieren von StaticResources innerhalb einer DataTemplate in einem ResourceDictionary festgestellt.StaticResource-Referenz in DataTemplate
In diesem Beispiel fülle ich ein Listenfeld mit den Zahlen 1 bis 9 mit einem DataTemplate, das in einem ResourceDictionary definiert ist.
Hier ist der MainWindow.xaml Code:
<Window x:Class="testResources.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow"
Width="525"
Height="350">
<Grid>
<ListBox Width="100" ItemTemplate="{StaticResource NumberTemplate}">
<ListBox.ItemsSource>
<Int32Collection>1,2,3,4,5,6,7,8,9</Int32Collection>
</ListBox.ItemsSource>
</ListBox>
</Grid>
Die NumberTemplate
in ResourceDictionary1.xaml definiert:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<DataTemplate x:Key="NumberTemplate">
<Grid Background="{StaticResource CoolNumbersColor}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="35" />
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" Background="{StaticResource CoolNumbersColor}" Text="{Binding Mode=OneWay}" />
</Grid>
</DataTemplate>
Die Static CoolNumbersColor
in App definiert ist. xaml zusammen mit ResourceDictionary1.xaml
. Hier ist meine Datei App.xaml:
<Application x:Class="testResources.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<SolidColorBrush x:Key="CoolNumbersColor">GreenYellow</SolidColorBrush>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/ResourceDictionary1.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Als erstes habe ich das erwartete Verhalten in Visual Studio 2010 Designer sehen. Tatsächlich erscheint eine farbige Liste von Zahlen. Aber wenn dieses Beispiel auszuführen versucht, erhalte ich die Fehler
„Can not Ressource finden namens‚CoolNumbersColor‘. Ressourcennamen sind Groß- und Kleinschreibung“
Ich kann nicht verstehen, warum dies geschieht. Ist CoolNumbersColor
Bewertung irgendwie aufgeschoben? Lexikalisch steht es vor dem fusionierten Ressourcenwörterbuch.
Die einzige Möglichkeit, dies zu erreichen (anders als mit DynamicResources), ist ein zweites ResourceDictionary zu erstellen (z. B. ResourceDictionary2.XAML), definieren CoolNumbersColor
dort und verschmelzen sie alle in ResourceDictionary.MergedDictionaries
wie folgt aus:
<Application x:Class="testResources.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/ResourceDictionary2.xaml" />
<ResourceDictionary Source="pack://application:,,,/ResourceDictionary1.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Wo verwenden Sie diese Ressource? Ich habe es in kleinen App versucht und funktioniert gut zu meinem Ende. –
Haben Sie versucht, CoolNumbersColor vor ResourceDictionary.MergedDictionaries in Application.Resources zu definieren? –
Ja, ich habe es benutzt und benutze es innerhalb 'DataTemplate' von' ListBox'. Immer noch keine Probleme. Kannst du es in einer kleinen App versuchen? Ich vermute, das Problem liegt woanders. –