从其他类绑定背景

时间:2016-01-06 15:40:49

标签: c# wpf xaml data-binding

我的问题中有以下文件夹结构:

- Themes                   // folder
  - ThemeManager.cs        // self explaining
  - ITheme.cs              // theme interface
  - Light.cs               // typeof ITheme

ThemeManager.cs:

public static class ThemeManager
{
    public static ITheme Theme { get; set; } = new Light();
}

ITheme.cs:

//using System.Windows.Media
public interface ITheme
{
    string Color { get; set; }
    Brush Color2 { get; set; }
}

Light.cs:

//using System.Windows.Media
class Light : ITheme
{
    public string Color { get; set; } = "#FF00FF00";
    public Brush Color2 { get; set; } = new SolidColorBrush(Colors.Lime);
}

所有三个文件都在命名空间MyProject.Themes中。

我使用以下代码绑定Background

中的XAML属性
xmlns:theme="clr-namespace:MyProject.Themes.ThemeManager.Theme"

但两者都

Background="{Binding theme:Color}"
Background="{Binding theme:Color2}"

由于绑定没有结果,使背景透明。

我做错了什么?我怎样才能正确绑定背景?

2 个答案:

答案 0 :(得分:1)

xmlns表示XML命名空间。它用于命名空间。所以它应该是xmlns:theme =“clr-namespace:MyProject.Themes”。此外,它是一个静态属性,您不能以与非静态相同的方式绑定它。

在你的情况下,它是

Background="{Binding Color, Source={x:Static theme:ThemeManager.Theme}}"

答案 1 :(得分:0)

我无法按原样编译XAML - 编译器不喜欢绑定。尽管如此,静态绑定并不是XAML的UWP风格的最强点;我不知道有什么办法完全你想要什么。

一种方法是将(非静态)属性添加到代码隐藏...

public string ThemeBackground => ThemeManager.Theme.Color;

...并绑定到:

Background="{x:Bind ThemeBackground}"

如果由于某种原因要使用Binding而不是x:Bind,请将该属性添加到数据上下文类型中。