ParameterizedResource ru - Leksiqq/WpfMarkupExtension GitHub Wiki
Класс ParameterizedResourceExtension
Применяется в разметке XAML аналогично <StaticResource>
или {StaticResource ResourceKeyValue}
. Действует так же, но при обнаружении в значении некоторых атрибутов символа $ определяет его как начало имени параметра и пытается подставить вместо параметра заданную замену.
поиск параметров производится:
- В элементах
<Binding>
или{Binding ... }
Path
ElementName
ConverterParameter
Source
XPath
- В элементах
<MultiBinding>
ConverterParameter
- В элементах
<l:ParameterizedResource>
(предполагается, что объявлен префикс:xmlns:l="clr-namespace:Net.Leksi.WpfMarkup;assembly=Net.Leksi.WpfMarkupExtension"
)ResourceKey
Важно! Следует иметь в виду, что при использовании параметров ресурс должен быть объявлен с атрибутом x:Shared="False"
, так как в противном случае подстановка будет выполнена только один раз при создании единственного экземпляра!
Свойства
-
ResourceKey
- Получает или задает значение ключа, передаваемое данной статической ссылкой ресурса. Ключ используется для возврата объекта, имеющего соответствующий ключ в словаре ресурсов. Варианты синтаксиса:- в атрибуте:
{l:ParameterizedResource ResourceKeyValue ... }
- в элементе:
- в атрибуте:
<l:ParameterizedResource ResourceKey="ResourceKeyValue"/>
-
Replaces
- массив строк, описывающий подстановки параметров. Наследуется вышележащими вызовамиProvideValue
в стеке. При необходимости подстановки используется самое позднее встреченное в стеке вызововProvideValue
определение. Варианты синтаксиса:- в атрибуте:
{l:ParameterizedResource ResourceKeyValue, Replaces=$param1:replace1|$param2:replace2... }
- в элементе:
- в атрибуте:
<l:ParameterizedResource ResourceKey="ResourceKeyValue">
<x:Array Type="sys:String">
<sys:String>$param1:replace1</sys:String>
<sys:String>$param2:replace2</sys:String>
...
</x:Array>
...
</l:ParameterizedResource>
или
<l:ParameterizedResource ResourceKey="ResourceKeyValue">
<l:ParameterizedResource.Replaces>
<x:Array Type="sys:String">
<sys:String>$param1:replace1</sys:String>
<sys:String>$param2:replace2</sys:String>
...
</x:Array>
</l:ParameterizedResource.Replaces>
...
</l:ParameterizedResource>
-
Defaults
массив строк, описывающий подстановки параметров. Не наследуется вышележащими вызовамиProvideValue
в стеке. Если для параметра задано значение по умолчанию, то оно подставляется, когда соответствующая подстановка не задана ранее в стеке вызововProvideValue
. Варианты синтаксиса:- в атрибуте:
{l:ParameterizedResource ResourceKeyValue, Defaults=$param1:default1|$param2:default2... }
- в элементе:
- в атрибуте:
<l:ParameterizedResource ResourceKey="ResourceKeyValue">
<l:ParameterizedResource.Defaults>
<x:Array Type="sys:String">
<sys:String>$param1:default1</sys:String>
<sys:String>$param2:default2</sys:String>
...
</x:Array>
</l:ParameterizedResource.Defaults>
...
</l:ParameterizedResource>
-
At
- произвольная строковая метка для отслеживания при отладке (смотритеVerbose
ниже). Варианты синтаксиса:- в атрибуте:
{l:ParameterizedResource ResourceKeyValue, At=AtValue ... }
- в элементе:
- в атрибуте:
<l:ParameterizedResource ResourceKey="ResourceKeyValue" At="AtValue"/>
-
Verbose
- степень детализации вывода на консоль при отладке, по умолчанию -0
- отсутствие вывода. Значение1
приводит к выводу на консоль вызововProvideValue
и действия с параметрами: наследование подстановок и сами подстановки; значение2
кроме перечисленного выводит все проверяемые элементы логического и визуального деревьев. Следует иметь в виду, что для вывода на консоль приложение должно компилироваться как "Консольное приложение". Варианты синтаксиса:- в атрибуте -
{l:ParameterizedResource ResourceKeyValue, Verbose=VerboseValue ... }
- в элементе:
- в атрибуте -
<l:ParameterizedResource ResourceKey="ResourceKeyValue", Verbose="VerboseValue"/>
-
Strict
- булева переменная, по умолчанию -true
- вызываетSystem.Windows.Markup.XamlParseException
, если какой-то параметр остался не подставленным. Значениеfalse
приводит к выводу на консоль соответствующего сообщения при условии, что приложение скомпилировано как "Консольное приложение". Варианты синтаксиса:- в атрибуте -
{l:ParameterizedResource ResourceKeyValue, Strict=False... }
- в элементе:
- в атрибуте -
<l:ParameterizedResource ResourceKey="ResourceKeyValue", Strict="False"/>
Пример
В качестве примера предлагается проследить в демо на вкладке «Demo2» шаблоны CellTemplateSelector
и CellEditingTemplateSelector
в DataGrid
и ресурсы для них в файле Dictionary2.xaml
.
Раньше: (StyleCombiner) Начало:(Обзор) Дальше:(BindingProxy)