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有效。)