Установка значения локальной переменной int в Int.MaxValue в xaml - PullRequest
1 голос
/ 29 ноября 2010

Мне было интересно, как я могу установить значение локальной переменной int в Int.MaxValue в xaml (в моем случае это ResourceDictionary).

что-то вроде: (но что-то, что работает :))

xmlns: s = "clr-namespace: System; сборка = mscorlib

<s:Int32 x:Key"HelloWorld">{x:Static s:Int.MaxValue}</s:Int32>

РЕДАКТИРОВАТЬ:

@ Ян:

Спасибо :) Нокак использовать статический ресурс как int? скажем, если у меня есть в ResourceDictionary

<ResourceDictionary>
    <x:Static
        x:Key="HelloWorld"
        Member="s:Int32.MaxValue"
        />
...
    <blablalba TooltipService.ShowDuration="{StaticResource HelloWorld}"/>` <-- this does not work by the way
</ResourceDictionary>

Ответы [ 2 ]

2 голосов
/ 29 ноября 2010

Это должно сделать это:

<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.

1 голос
/ 12 июня 2015

Проблема в том, что нет класса Int Если вы попробуете с Int32, он будет работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...