Доступ к значениям из файла xaml в коде (Просмотр) напрямую - PullRequest
0 голосов
/ 03 июля 2018

У меня есть файл (icons.xaml), который я добавил как файл в Ресурсы моего проекта. Содержание файла приведено ниже:

Icons.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<VisualBrush x:Key="Bucket"
             Stretch="Uniform">
    <VisualBrush.Visual>
        <Viewbox Stretch="xxxx">
            <Canvas Width="xxxxx"
                    Height="xxxx"> and so on...

Свойства файла Icons.xaml в версии 2017

Теперь я хочу использовать VisualBrush, упомянутый выше, в моем коде XAML (View) напрямую. Строки приведены ниже:

Код XAML (просмотр)

<Setter Property="Icon">
    <Setter.Value>
       <Rectangle Fill="{Binding Bucket, Source={x:Static resx:Resources.Icons}}"/>
    </Setter.Value>
</Setter>

Пространство имен "resx" определяется как:

xmlns:resx="clr-namespace:MyProjectNamespace.Properties"

Когда я запускаю свой проект, я не вижу, чтобы мои значки были привязаны к свойству заливки прямоугольника, и я получаю некоторую ошибку xaml intellisense, которая является "Не удается разрешить свойство" Ведро "в контексте типа" строка ".

Цель: я хочу использовать ключ Visualbrush непосредственно в XAML в свойстве Fill моего Rectangle в моем коде просмотра.

Примечание. У меня есть ограничение: я не могу использовать код в представлении, приведенном ниже, я не могу использовать вкладку <ResourceDictionary> в коде xaml.

 <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/MyProjectNamespace;component/Resources/Icons.xaml"></ResourceDictionary>
    </ResourceDictionary.MergedDictionaries>
 </ResourceDictionary>

Я придерживаюсь правильного подхода в отношении своей цели или мне следует изменить этот подход?

Я видел методы, которые используются здесь в этом ответе, но ни один из них не работает Получить значения из * .resx файлов в XAML

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Связывание не обязательно, просто попробуйте:

<Rectangle Fill="{x:Static resx:Resources.Icons.Bucket}"/>

0 голосов
/ 03 июля 2018

Я думаю, что основная проблема заключается в том, что Binding фактически ищет свойство Binding для объекта Resources.Icons.

Попробуйте это:

<Setter Property="Icon">
    <Setter.Value>
       <Rectangle Fill="{Binding Bucket, Source={x:Static resx:Icons}}"/>
    </Setter.Value>
</Setter>
...