C# 从其他类绑定背景

C# 从其他类绑定背景,c#,wpf,xaml,data-binding,C#,Wpf,Xaml,Data Binding,我的问题中有以下文件夹结构: - Themes // folder - ThemeManager.cs // self explaining - ITheme.cs // theme interface - Light.cs // typeof ITheme 管理者.cs: public static class ThemeManager { public static

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

- Themes                   // folder
  - ThemeManager.cs        // self explaining
  - ITheme.cs              // theme interface
  - Light.cs               // typeof ITheme
管理者.cs:

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

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

public static class ThemeManager
{
    public static ITheme Theme { get; set; } = new Light();
}
//using System.Windows.Media
public interface ITheme
{
    string Color { get; set; }
    Brush Color2 { get; set; }
}
//using System.Windows.Media
class Light : ITheme
{
    public string Color { get; set; } = "#FF00FF00";
    public Brush Color2 { get; set; } = new SolidColorBrush(Colors.Lime);
}
这三个文件都位于命名空间
MyProject.Themes

我使用以下代码绑定我的
XAML
中的
Background
属性

xmlns:theme="clr-namespace:MyProject.Themes.ThemeManager.Theme"
但两者都有

Background="{Binding theme:Color}"
Background="{Binding theme:Color2}"
由于绑定没有结果,请使背景透明


我做错了什么?如何正确绑定背景?

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

在你的情况下,是这样的

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

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

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

public string ThemeBackground => ThemeManager.Theme.Color;
…并且必须遵守:

Background="{x:Bind ThemeBackground}"

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

不幸的是,这个问题是关于UWP的(从标记判断),XAML的UWP风格不支持
x:Static
。(不过,您的评论对完整WPF有效。)