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 属性 可以在页面级别设置。