我想通过绑定设置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") }
};
我尝试使用new ImageBrush()
创建BitmapImage
并将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");
}
}
答案 0 :(得分:1)
转换器是否返回画笔而不是路径:
int index = (int)value;
ImageBrush retValue = new ImageBrush
{
Stretch = Windows.UI.Xaml.Media.Stretch.UniformToFill,
ImageSource = new BitmapImage { UriSource = new Uri("ms-appx:///Assets/Backgrounds/" + index.ToString() + ".png") }
};
return retValue;
当然要做得更好,并进行错误检查等等,但这可以解决这个问题。
此外,我不会将其作为双向绑定。没有办法将画笔转换回索引。