【发布时间】:2015-10-02 13:47:11
【问题描述】:
我想通过绑定设置rootFrame的背景,但我遇到了一些问题。
我有这个代码,但它不起作用...
Binding myBinding = new Binding();
myBinding.Source = DataModel.Settings;
myBinding.Path = new PropertyPath("SelectedBackgroundIndex");
myBinding.Mode = BindingMode.TwoWay;
myBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
myBinding.Converter = new BgIndexToBgConverter();
rootFrame.SetBinding(Frame.BackgroundProperty, myBinding);
我认为我做错了,我应该先创建ImageBrush,然后绑定它的源。
此代码有效,但如何通过绑定实现它?
rootFrame.Background = new ImageBrush
{
Stretch = Windows.UI.Xaml.Media.Stretch.UniformToFill,
ImageSource = new BitmapImage { UriSource = new Uri("ms-appx:///Assets/Backgrounds/" +
DataModel.Settings.SelectedBackgroundIndex.ToString() + ".png") }
};
我尝试使用BitmapImage 创建new ImageBrush() 并将Uri 的源绑定到它,但是我有很多乱七八糟的代码无论如何都不起作用,所以我不会在这里复制它。
编辑:
转换器返回对应背景图片的路径。
int index = (int)value;
string path = "ms-appx:///Assets/Backgrounds/" + index.ToString() + ".png";
return path;
而SelectedBackgroundIndex 是带有通知的整数属性
private int selectedBackgroundIndex;
public int SelectedBackgroundIndex
{
get
{
return selectedBackgroundIndex;
}
set
{
selectedBackgroundIndex = value;
NotifyPropertyChanged("SelectedBackgroundIndex");
}
}
【问题讨论】:
-
看起来你正在绑定一个索引,所以转换器肯定有一些有趣的事情发生。发布转换器代码和
DataModel.Settings的所有相关部分。否则我真的无法判断出了什么问题。什么是“不起作用”?没有刷子,不切换还是什么? -
我更新了问题。不起作用意味着根本没有背景(它是黑色的)。
-
你的错误是背景需要画笔而不是我相信的路径。