Привязка типа Brush к фону (или установка привязки в коде) - PullRequest
1 голос
/ 13 августа 2010

Я хочу позволить пользователю настроить фон моего приложения и выбрать либо цвет, либо изображение С непрозрачным переплетом. Я хочу сделать это в XAML, если это возможно.

Кажется, я очень близок - приведенный ниже код прекрасно работает как с цветом, так и с кистью изображения (если я закомментирую другую), но я не могу найти способ вернуть соответствующую кисть в зависимости от логического значения (UseBackgroundImage).

Если вы посмотрите в приведенном ниже коде, то увидите, что я закомментировал ImageBrush - я пытался вставить VisibilityConverter, связанный с UseBackgroundImage, но объект Brush не использует свойство Visibility.

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

<navigation:Frame>
    <navigation:Frame.Background>
        <SolidColorBrush Color="{Binding Config.BackgroundColorInfo.Value}" Opacity="{Binding Config.BackgroundOpacity}" />
        <!--<ImageBrush ImageSource="/TourneyManager;component/image.JPG" Stretch="UniformToFill" Opacity="{Binding Config.BackgroundOpacity}"/>-->
    </navigation:Frame.Background>
    <navigation:Frame.UriMapper>

Затем я попытался установить привязки в коде так:

  SolidColorBrush backgroundBrush = new SolidColorBrush();
Binding b = new Binding("Config.BackgroundColorInfo.Value");
ContentFrame.SetBinding(SolidColorBrush.ColorProperty, b);

Binding b1 = new Binding(".BackgroundOpacity");
ContentFrame.SetBinding(SolidColorBrush.OpacityProperty, b1);

ContentFrame.Background = backgroundBrush;

Но у класса SolidColorBrush нет метода SetBinding, так что радости нет.

Любые предложения о том, как этого добиться, пожалуйста?

1 Ответ

3 голосов
/ 13 августа 2010

Чтобы установить привязку к DependencyObject, который не является производным от FrameworkElement, необходимо использовать статический метод BindingOperations.SetBinding: -

SolidColorBrush backgroundBrush = new SolidColorBrush();
Binding b = new Binding("Config.BackgroundColorInfo.Value");
BindingOperations.SetBinding(backgroundBrush, SolidColorBrush.ColorProperty, b);

Обратите внимание, что в документации указано, что вы получите исключение, если цель не относится к типу FrameworkElement, но документация не соответствует возможностям Silverlight 4.

Редактировать

Сказав, что, поскольку у вас уже есть класс, который вы выставляете как свойство Config, почему бы этому классу просто не предоставить свойство "BackgoundBrush" типа Brush?

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