首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在UWP应用程序中更新ResourceTheme未反映在TextBox BorderBrush上

在UWP应用程序中更新ResourceTheme未反映在TextBox BorderBrush上
EN

Stack Overflow用户
提问于 2018-09-19 13:49:37
回答 1查看 415关注 0票数 0

我正在从代码隐藏更新应用程序ThemeResource。它正在更改应用程序主题,但未更新TextBox BorderBrush属性。

我有一个DarkLight主题的自定义资源MyBorderBrush,这是我在App.xaml中定义的。

Xaml:

代码语言:javascript
复制
<StackPanel>
            <TextBox PlaceholderText="My PlaceholderText" Height="100" Width="500" HorizontalAlignment="Center" Style="{StaticResource NoHighlightTextBoxStyle}" BorderBrush="{Binding IsError, Converter={ThemeResource BorderBrushColorConverter}}" VerticalAlignment="Center" ></TextBox>
            <Button Content="Change Theme" Click="Button_Click"></Button>
</StackPanel>

代码隐藏:

代码语言:javascript
复制
private void Button_Click(object sender, RoutedEventArgs e)
{
    this.RequestedTheme = this.RequestedTheme == ElementTheme.Light ? ElementTheme.Dark : ElementTheme.Light;
}

编辑

我认为问题可能是代码隐藏或定义资源,所以我只是分享了最少的代码,以便重现该问题。但正如@Ashiq指出的那样,问题出在TextBox上。实际上,事情是我有一个BorderBrush属性绑定到一个转换器,以获得正确的值,但在改变主题边框颜色是不会改变的。

转换器:

代码语言:javascript
复制
 public class BorderBrushColorConverter : IValueConverter
 {
        public object Convert(object value, Type targetType, object parameter, string language)
        {
            var isError = value as bool? ?? false;
            return isError
                ? Application.Current.Resources["MyBorderBrushMandatory"] as SolidColorBrush
                : Application.Current.Resources["MyBorderBrush"] as SolidColorBrush;
        }

        public object ConvertBack(object value, Type targetType, object parameter, string language)
        {
            throw new NotImplementedException();
        }
}

App.xaml

代码语言:javascript
复制
<ResourceDictionary x:Key="Light" >
             <Color x:Key="MyBorder">#6b6b6b</Color>
             <SolidColorBrush x:Key="MyBorderBrush" Color="{ThemeResource MyBorder}" />

              <Color x:Key="MyBorderMandatory">#ff0000</Color>
              <SolidColorBrush x:Key="MyBorderBrushMandatory" Color="{ThemeResource MyBorderMandatory}" />
</ResourceDictionary>
<ResourceDictionary x:Key="Dark" >
               <Color x:Key="MyBorder">#c85332</Color>
               <SolidColorBrush x:Key="MyBorderBrush" Color="{ThemeResource MyBorder}" />

               <Color x:Key="MyBorderMandatory">#FFD700</Color>
               <SolidColorBrush x:Key="MyBorderBrushMandatory" Color="{ThemeResource MyBorderMandatory}" />
</ResourceDictionary>
EN

回答 1

Stack Overflow用户

发布于 2018-09-19 14:28:20

您正在运行时进行动态主题更改。因此,将StaticResource更改为ThemeResource。就这样。

从…

代码语言:javascript
复制
BorderBrush="{StaticResource MyBorderBrush}"

代码语言:javascript
复制
BorderBrush="{ThemeResource MyBorderBrush}"

谢谢你。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52398960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档