TextBox 资源中的 C# UWP 数据绑定
C# UWP data binding in TextBox Resources
我在我的应用程序中实现了一个 light/dark 主题,用户可以在其中按下浅色或深色按钮,所有应用程序的颜色都会改变。我通过将 SolidColorBrush 绑定到每个元素的背景和前景来做到这一点,例如
在视图模型中:
private SolidColorBrush fontColour;
public SolidColorBrush FontColour
{
get { return fontColour; }
set
{
fontColour = value;
OnPropertyChanged(nameof(FontColour));
}
}
在xaml中:
<TextBox Text="{Binding EventLog}"
Foreground="{Binding FontColour}"
Background="{Binding ColourTheme5}"/>
这按预期工作。但是,当我尝试在 TextBox.Resources 中做同样的事情时,绑定根本不起作用,例如
(TextControlForegroundPointerOver 的绑定不起作用)
<TextBox Text="{Binding EventLog}"
Foreground="{Binding FontColour}"
Background="{Binding ColourTheme5}">
<TextBox.Resources>
<SolidColorBrush x:Key="TextControlForegroundPointerOver"
Color="{Binding FontColour}"
Opacity="1" />
</TextBox.Resources>
</TextBox>
我几乎可以肯定,TextBox.Resources
不是 DependencyProperty,因此无法绑定。
如果你想在编译时设置它,使用代码初始化(就像你放在最底部的例子)。
如果要在 运行 时间设置它,如果 window/user 控件放置了文本框,则必须在构造函数中以编程方式进行设置。这应该有效。
编辑:我错过了问题的“light/dark主题”部分,因此我想补充:
Windows 社区工具包中有很多关于主题的内容,进一步的文档以及他们的示例应用程序中的一部分,您可以在 https://docs.microsoft.com/en-us/windows/communitytoolkit/helpers/themelistener.
中找到
您正在重新发明轮子。 Xaml 有 Theme Resources and RequestedTheme 属性 可以在页面级别设置。
我在我的应用程序中实现了一个 light/dark 主题,用户可以在其中按下浅色或深色按钮,所有应用程序的颜色都会改变。我通过将 SolidColorBrush 绑定到每个元素的背景和前景来做到这一点,例如
在视图模型中:
private SolidColorBrush fontColour;
public SolidColorBrush FontColour
{
get { return fontColour; }
set
{
fontColour = value;
OnPropertyChanged(nameof(FontColour));
}
}
在xaml中:
<TextBox Text="{Binding EventLog}"
Foreground="{Binding FontColour}"
Background="{Binding ColourTheme5}"/>
这按预期工作。但是,当我尝试在 TextBox.Resources 中做同样的事情时,绑定根本不起作用,例如
(TextControlForegroundPointerOver 的绑定不起作用)
<TextBox Text="{Binding EventLog}"
Foreground="{Binding FontColour}"
Background="{Binding ColourTheme5}">
<TextBox.Resources>
<SolidColorBrush x:Key="TextControlForegroundPointerOver"
Color="{Binding FontColour}"
Opacity="1" />
</TextBox.Resources>
</TextBox>
我几乎可以肯定,TextBox.Resources
不是 DependencyProperty,因此无法绑定。
如果你想在编译时设置它,使用代码初始化(就像你放在最底部的例子)。
如果要在 运行 时间设置它,如果 window/user 控件放置了文本框,则必须在构造函数中以编程方式进行设置。这应该有效。
编辑:我错过了问题的“light/dark主题”部分,因此我想补充:
Windows 社区工具包中有很多关于主题的内容,进一步的文档以及他们的示例应用程序中的一部分,您可以在 https://docs.microsoft.com/en-us/windows/communitytoolkit/helpers/themelistener.
中找到您正在重新发明轮子。 Xaml 有 Theme Resources and RequestedTheme 属性 可以在页面级别设置。