在后面的代码中使用ImageBrush绑定Frame.BackgroundProperty

时间:2015-10-02 13:47:12

标签: c# wpf

我想通过绑定设置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");
     }
}

1 个答案:

答案 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;

当然要做得更好,并进行错误检查等等,但这可以解决这个问题。

此外,我不会将其作为双向绑定。没有办法将画笔转换回索引。