Зачем нужен StaticResource? - PullRequest
       20

Зачем нужен StaticResource?

0 голосов
/ 23 декабря 2011

Во-первых, я искал долго и упорно, чтобы попытаться найти ответ на этот вопрос. Я обратился сюда за экспертной помощью по этой проблеме.

В настоящее время я читаю книгу о программировании для Windows Phone 7. В настоящее время я изучаю привязку данных (и тоже неплохо работаю). Я сталкивался с вопросом о форматировании DataBinding в WPF, в основном о функции StaticResource.

В следующем коде вы увидите слайдер и текстовый блок. Текстовый блок привязан к ползунку, поэтому при перемещении ползунка значение текстового блока изменяется. Был создан класс TruncationConverter, и его можно вызывать в XAML с ключевым словом «truncate». Заявлено в телефоне: ApplicationPage.Resources.

Итак, это правильно

    <TextBlock Name="txtblk"
Text="{Binding ElementName=slider,
Path=Value,
Converter={StaticResource truncate}}"

И это неправильно

<TextBlock Name="txtblk"
Text="{Binding ElementName=slider,
Path=Value,
Converter=truncate}"

В книге никогда не объяснялось, почему нужно ставить StaticResource перед функцией.

Итак, вопрос в том, зачем вам нужно ставить StaticResource перед вызовом? Что он делает, какова его функция? Почему возникает ошибка, когда вы не помещаете StaticResource перед усечением.

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 23 декабря 2011

Конструктор для класса Converter использует расширение разметки для работы.Расширение разметки требует, чтобы объект был предварительно определен в графе объектов, и это было сделано, когда вы присвоили классу преобразователя ключ.Когда синтаксический анализатор Xaml видит StaticResource (или DynamicResource), он начинает смотреть вверх в графе объектов, пока не будет найдено значение.Во время выполнения создается экземпляр класса, который используется для ваших преобразований.После того, как экземпляр вашего конвертера создан, WPF использует его в течение всего срока службы вашего приложения, следовательно, «Статический».

«Статический ресурс» может показаться лишним или избыточным, поскольку конвертер не может быть DynamicResource, ноТаковы правила синтаксиса Xaml.

0 голосов
/ 23 декабря 2011

В основном размещение StaticResource говорит ему найти внешнее свойство, вероятно, в ResourceDictionary, который содержит функцию, например, «усечь»

Так что, как и в другом примере, если я пойду и скажу создать другой элемент управления или конвертер или даже кисть или другой экземпляр, который я хочу сделать доступным для других элементов приложения, он будет создан как доступный ресурс, который можно редактировать только в одно место (словарь ресурсов), но может использоваться всеми, например; Статический ресурс

Как и при размещении ползунка и текстового блока, он по умолчанию вызывает стиль для каждого из найденных в вашем словаре ресурсов CoreStyles. Если бы я захотел изменить то, что они делали или как они выглядят, например, я мог бы скопировать ресурс, отредактировать его, если необходимо, переименовать и сказать, позвоните по

...