Как сослаться на существующие ресурсы из вызова XamlReader.Parse (xmlFragment) - PullRequest
0 голосов
/ 19 марта 2019

У меня есть ситуация, в которой я создаю пользовательский шаблон данных с использованием XamlReader.Parse (xamlString), где xamlString - это фрагмент, который содержит шаблон данных:

<DataTemplate xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
    <StackPanel Visibility="{Binding MyBinding, Converter={StaticResource boolToVisibilityConverter}}">
        ...
    </StackPanel>
</DataTemplate>

Как видите, этот DataTemplate имеет ссылку на статический ресурс (BooleanToVisibilityConverter). Вызов XamlReader.Parse завершается без исключения, и я назначаю его результат (объект DataTemplate) объекту в иерархии сцены (в данном случае, GridViewColumn.CellTemplate). Но по какой-то причине при вызове MainWindow.Show () я получаю исключение:

System.Windows.Markup.XamlParseException: ''Provide value on 'System.Windows.Markup.StaticResourceHolder' threw an exception.' Line number 'x' and line position 'y'.'

Inner Exception:
Exception: Cannot find resource named 'boolToVisibilityConverter'. Resource names are case sensitive.

Почему загруженный фрагмент XAML не может ссылаться на существующий ресурс на странице?

1 Ответ

0 голосов
/ 19 марта 2019

Когда фрагмент XAML создается изначально, я не думаю, что он знает что-либо о родительском контейнере, в который вы собираетесь его поместить, включая статические ресурсы, определенные в родительском контейнере. Попробуйте сослаться на boolToVisibilityConverter внутри DataTemplate, используя взамен DataTemplate.Resources.

...