将一种类型的Brush绑定到Background(或在代码中设置绑定)

时间:2010-08-13 10:26:45

标签: silverlight binding silverlight-4.0

我想让用户自定义应用程序的背景,并选择带有不透明度绑定的颜色或图像。如果可能的话,我想在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 个答案:

答案 0 :(得分:3)

要在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属性,为什么不让这个类只显示类型Brush的“BackgoundBrush”属性?