Это должно сделать это:
<x:Static
x:Key="HelloWorld"
Member="s:Int32.MaxValue"
/>
На случай, если неясно, что на самом деле здесь происходит, используется удобный трюк, о котором многие люди не знают: хотя расширения разметки, такие как x:Static
обычно используются в атрибутах внутри фигурных скобок ({}), для них также можно использовать синтаксис элемента.Это полезно в подобных ситуациях, когда вы хотите использовать расширение разметки, но синтаксис Xaml ожидает элемент.(Это чаще всего необходимо в сценариях с участием коллекций, таких как этот.)
Одна небольшая ошибка с использованием синтаксиса элементов для расширений разметки состоит в том, что вам больше не нужно передавать аргументы конструктора.(Технически, поддержка аргументов конструктора была введена в XAML 2009, который поддерживается с .NET 4. Однако он поддерживается только при загрузке Xaml через новые API-интерфейсы Xaml. В документации MSDN говорится, что новые функции XAML 2009не поддерживается для скомпилированного Xaml в WPF .) Поэтому этот прием можно использовать только с расширениями разметки, которые предлагают конструкторы по умолчанию и которые предоставляют свойства, которые можно использовать вместо аргументов конструктора.StaticExtension
предоставляет свойство Member
, которое делает трюк, поэтому мы в порядке, но помните, что иногда вы застреваете из-за невозможности вызова соответствующего конструктора.
Примечаниечто при вводе этого кода Xaml IntelliSense в Visual Studio, вероятно, предложит StaticExtension
, которое является настоящим именем этого расширения разметки.Когда вы используете синтаксис атрибута, он исключает часть Extension
, но с элементами, по-видимому, это не так.Хотя любая форма верна - я бы согласился с тем, что я здесь написал, а не с тем, что предлагает IntelliSense, потому что мы более привыкли видеть "{x:Static ...}"
в атрибутах, чем "{x:StaticExtension ...}"
- опять же, оба допустимы, но идиоматическимы склонны отойти от Extension
.