Как поместить обязательную информацию в Ресурс - PullRequest
0 голосов
/ 01 декабря 2011

Я экспериментировал с использованием App.Config Properties.Settings в XAML. Например, я добавил параметр для GridMaxWidth как целое число 500. Затем в моем XAML я добавил

<UserControl ...
    xmlns:Properties="clr-namespace:MyMainNamespace.Properties"
    ....>

<SomeControl 
    MaxWidth={Binding Source={x:Static Properties:Settings.Default},
                      Mode="OneWay,
                      Path=GridMaxWidth}">

Это отлично работает. Мой вопрос: есть ли способ уменьшить визуальный беспорядок и поместить всю эту информацию об источнике и режиме привязки в словарь ресурсов? Я попытался поместить свойство в файл ресурсов, но xaml не смог его увидеть.

1 Ответ

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

В большинстве случаев привязки создаются навсегда и не должны настраиваться, поэтому создание привязки в коде безопасно:

Пример


public class MaxWidthBidning: MultiBinding
{
   public MaxWidthBidning()
   {
      this.Bindings.Add(...)
      ...
   }
}

Этот подход очень помогает при работе с громоздкими MultiBindings с конвертерами, превращая 5 ++ строки XAML в одну.


<local:Control ComplexProperty={local:MaxWidthBidning} />

Обновление 1 - Говоря об уменьшении «визуального беспорядка» в целом, я могу назвать два основных метода, которые мы используем:

  1. ДляНе запечатанные объекты, принятые XAML (обратите внимание, что некоторые производные объекты не могут быть использованы в XAML по какой-то причине (ожидается точное совпадение типов вместо проверки IsDervied) - поэтому всегда пробуйте это раньше. Например, Bidning - вы можете создатькласс, извлеченный из Binding и проводящий материал (отдельные пути MultiBinding и конвертер), который не предполагается изменять в XAML.

  2. Например, для закрытых объектов - DoubleAnimationUsingKeyFrames - вы можетесоздайте прикрепленное поведение, например «StreamlinedAnimation.Definition», и с его помощью создайте громоздкие части в коде, поэтому ваша анимация будет выглядеть следующим образом:


<DoubleAnimationUsingKeyFrames local:StreamlinedAnimation.Definiton="Some Encoded information to be used for creating Frames" />

...