Frage

Hier ist eine Demonstration des Problems:

von einem einfachen Fenster:

<Window x:Class="TestWpfStaticResource.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<TextBlock Text="{StaticResource TestString}">
    <TextBlock.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resources.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </TextBlock.Resources>
</TextBlock>

Ich versuche, eine Ressource in einem Resource zuzugreifen:

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String x:Key="TestString">Test</sys:String>
</ResourceDictionary>

Visual Studio 2010 zeigt mein Fenster mit dem erwarteten Ergebnis, aber wenn Sie die Anwendung ausführen ich diese Ausnahme erhalten:

Cannot find resource named 'TestString'. Resource names are case sensitive.

Anmerkung 1:. Bei Verwendung eines Dynamic das Ergebnis ist in Ordnung in VS 2010 und zur Laufzeit

Hinweis. 2: der Verweis auf die Ressource Wörterbuch außerhalb des Textblockes setzen, in den Windows-Ressourcen zum Beispiel gibt das erwartete Ergebnis, aber mein reales Szenario ist, dass nicht zulassen

So Was mache ich falsch und wie das erwartete Ergebnis erhalten?

ANTWORT : Nach mehr testen es scheint, dass der XAML-Parser ganz minimal ist und Parsen Inhalt, wie es kommt, der Reihe nach, ohne zu versuchen, etwas zu interpretieren. So Erklärung wichtig ist, um: Sie müssen nach dem Verweis auf das Wörterbuch den Verweis auf die Eigenschaft „Text“ gesetzt. Und der einzige Weg, das zu tun scheint, den Verweis auf die Static in einem „Bindung“ Elemente zu wickeln.

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Ich denke, das Problem ist, dass, wenn es versucht, die statische Ressource zu finden, ist es noch nicht in das aktuelle Ressourcenverzeichnis fusionierte ... nicht sicher, though.

es so tun scheint zu funktionieren:

    <TextBlock>
        <TextBlock.Resources>    
            <ResourceDictionary>
                 <ResourceDictionary.MergedDictionaries>
                       <ResourceDictionary Source="Resources.xaml"></ResourceDictionary>
                 </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
       </TextBlock.Resources>

        <TextBlock.Text>
            <Binding  Source="{StaticResource TestString}" />
        </TextBlock.Text>           
    </TextBlock>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top