здесь является демонстрацией проблемы:Как ссылаться на статический ресурс из текущих ресурсов компонента?
из простого окна:
<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>
Я пытаюсь получить доступ к ресурсу в ResourceDictionary:
<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>
Визуальных Studio 2010 показывает мое окно с ожидаемым результатом, но при запуске приложения я получаю это исключение:
Cannot find resource named 'TestString'. Resource names are case sensitive.
Примечание 1: при использовании DynamicResource результат будет прекрасным в VS 2010 и во время выполнения.
Примечание 2: размещение ссылки на словарь ресурсов за пределами TextBlock, в Windows Resources, например, дает ожидаемый результат, но мой реальный сценарий этого не позволяет.
Итак, Что я делаю неправильно и как получить ожидаемый результат?
ОТВЕТ: после того, как более тестирования оказывается, что XAML анализатор довольно минимален и разбирает содержимое, как это происходит, последовательно, не пытаясь интерпретировать ничего. Итак, порядок объявления важен: вы должны поместить ссылку на свойство «Текст» ПОСЛЕ ссылки на словарь. И единственный способ сделать это, похоже, привязать ссылку к StaticResource в элементе «Связывание».
Заранее спасибо.
Спасибо за ваш ответ. Действительно, это работает так, поэтому теперь у нас есть обходное решение, но вопрос о том, что именно происходит в моем первоначальном вопросе, остается. – Pragmateek
Хорошо, после большего тестирования кажется, что парсер выполняет очень минимальную работу. Я добавлю ответ на эту тему. – Pragmateek
Я обновил исходный вопрос более подробно. Еще раз спасибо за полезный ответ. – Pragmateek