Почему моя форма wpf связана с внутренним ресурсом? - PullRequest
0 голосов
/ 30 марта 2020

У меня есть элемент управления wpf и ресурс (помеченный как внутренний) - оба в одном и том же пространстве имен.

Но когда я пытаюсь получить доступ к ресурсу через

   <Window x:Class="WpfApp7.MainWindow"
        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:WpfApp7"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <TextBlock Text="{x:Static local:Resource1.String1}" />
    </Grid>
   </Window>

, я получаю исключение XamlParseException во время выполнения. Как только я делаю ресурс publi c, все работает нормально.

Я вынужден сделать ресурс publi c для доступа к нему из xaml? В фоновом c# коде все работает нормально.

РЕДАКТИРОВАТЬ: внутреннее исключение ArgumentException сообщает, что значение * stati c "WpfApp7.Resource1.String1" не может быть разрешено как enum, поле stati c или собственность.

1 Ответ

1 голос
/ 30 марта 2020

Вы должны понимать, что {x:static} - это расширение разметки, которое просто используется для разрешения свойства Member во время выполнения с XAML-сервисами, которые размещаются в другой сборке. См. x: Stati c Расширение разметки на MSDN:

Вы можете сделать x: Stati c ссылки на поля или свойства stati c, которых нет в пространство имен XAML по умолчанию для текущего документа XAML; однако для этого требуется отображение префикса. Пространства имен XAML почти всегда определяются в элементе root документа XAML.

Операции поиска для свойств stati c могут выполняться. NET XAML Services и его программами чтения XAML и пишущими XAML, когда они работают с контекстом схемы XAML по умолчанию.

Таким образом,

<TextBlock Text="{x:Static local:Resource1.String1}" />

совпадает с:

<TextBlock Text="{x:Static Member=local:Resource1.String1}" />

Поскольку внутреннее свойство может ' Не может быть проанализировано сообщение об ошибке по умолчанию о том, что Member должно быть выдано:

Кодовая ссылка, на которую ссылается, должна быть одной из следующих:

  • A Константа
  • Состояние c Свойство
  • Поле
  • Значение перечисления

Указание любого другого объекта кода, например, нонстати c свойство, вызывает ошибку времени компиляции, если XAML компилируется с разметкой, или исключение синтаксического анализа времени загрузки XAML.

...