我的问题中有以下文件夹结构:
- 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}"
由于绑定没有结果,使背景透明。
我做错了什么?我怎样才能正确绑定背景?
答案 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
,请将该属性添加到数据上下文类型中。