我想让用户自定义应用程序的背景,并选择带有不透明度绑定的颜色或图像。如果可能的话,我想在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方法,所以没有欢乐。
有关如何实现这一目标的任何建议吗?
答案 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”属性?