问开发者一个问题,UWP主题切换要怎么实现?

player2135 UID.664133
2018-01-08 发表

不要那种改RequestedTheme的值的,今天晚上想了很多办法都不行,本来以为像web里面切换css文件一样简单的。。 不会真的要一个一个控件去改颜色吧。。

敬告:
为防止不可控的内容风险,本站已关闭新用户注册,新贴的发表及评论;
你现在看到的内容只是互联网用户曾经发表的言论快照,仅用于老用户留存纪念,且仅与科技行业相关,全部内容不代表本站观点及立场;
本站重新开放前已针对包括用户隐私、版权保护、信息安全、国家政策在内的各种互联网法律法规要求,执行了隐患内容的自查、屏蔽和删除;
本站目前所属个人主体,未有任何盈利安排与计划,且与原WFUN.COM所属公司不存在任何关联关系;
如果本帖内容或者相关资源侵犯到您的合法权益,或者您认为存在问题,那么请您务必点此举报或投诉!
全部回复:
516****708 UID.1164430
2018-01-09 使用 Lumia Icon 回复

去官博看吧……

东方****WP UID.2877364
2018-01-09 回复

写2个theme。。你需要修改颜色属性的控件使用ThemeResource。。把根frame的RequestedTheme 切换下。。
***图片停止解析***

东方****WP UID.2877364
2018-01-09 回复

你说 本来以为像web里面切换css文件一样简单的 ,说明你没弄懂XAML的工作原理。。

player2135 UID.664133
2018-01-09 回复

Quote东方财富网UWP 发表于 2018-1-9 16:53
你说 本来以为像web里面切换css文件一样简单的 ,说明你没弄懂XAML的工作原理。。 ...


其实搞明白了,XAML其实相当于先编译后运行,不像Web是解释型的,关键其实不怎么想用RequestedTheme去做,相当于被限制了只能有两个主题。。

player2135 UID.664133
2018-01-09 回复

Quote东方财富网UWP 发表于 2018-1-9 16:52
写2个theme。。你需要修改颜色属性的控件使用ThemeResource。。把根frame的RequestedTheme 切换下。。
[qpi ...


谢谢了,就这样搞算了,关键其实按我的想法,微软完全可以做成ThemeDictionaries里面的ResourceDictionary可以设置IsEnabled就行了

东方****WP UID.2877364
2018-01-10 回复

Quoteplayer2135 发表于 2018-1-9 21:15
其实搞明白了,XAML其实相当于先编译后运行,不像Web是解释型的,关键其实不怎么想用RequestedTheme去做 ...


no no no, 系统的theme 是只有2个。但是你自己可以扩展哇。比如红色主题,你可以把 light theme里面的MergedDictionaries 指向 你写的红色的ResourceDictionary,这样就变相的把light theme 变成了 你想要的红色主题。 以前WPF 有 DynamicResource 只需动态更换app 下MergedDictionaries 里面指向你想要的主题就可以了,DynamicResource 不是预编译的,所以性能要差些。 UWP下砍掉估计也是性能问题{:6_222:}

player2135 UID.664133
2018-01-10 回复

Quote东方财富网UWP 发表于 2018-1-10 10:53
no no no, 系统的theme 是只有2个。但是你自己可以扩展哇。比如红色主题,你可以把 light theme里面的Mer ...


可以这样啊?求问MergedDictionaries怎么实现呢?

东方****WP UID.2877364
2018-01-10 回复

Quoteplayer2135 发表于 2018-1-10 12:49
可以这样啊?求问MergedDictionaries怎么实现呢?


App.Current.Resources.MergedDictionaries 它是ResourceDictionary一个属性哇。 比如你的App 的RequestedTheme 是Light,那么 第一步在APP.xaml里面加入 <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="Dark" Source="DarkTheme.xaml"/> <ResourceDictionary x:Key="Light" Source="LightTheme.xaml"/> </ResourceDictionary.ThemeDictionaries> 第二步在LightTheme.xaml 加入 <ResourceDictionary.MergedDictionaries> <ResourceDictionary x:Key="Light" Source="LightStyle.xaml"/> </ResourceDictionary.MergedDictionaries> 第三步,在你切换主题的时候, 将LightTheme.xaml 的MergedDictionaries里面 换成你想要的 主题,比如RedStyle.xaml 至于怎么在后台获取到LightTheme。。你可以通过App.Current.Resources.ThemeDictionaries 拿到。 切换主题的时候 将LightTheme 的MergedDictionaries Clear 然后 MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("ms-appx:///Themes/RedStyle.xaml") }); 大概是这样的

东方****WP UID.2877364
2018-01-10 回复

在UWP下面。不管你用什么方式。都要去通知UI RequestedTheme 变化了。不然之前的代码也不会生效。 (Window.Current.Content as Frame).RequestedTheme = ElementTheme.Dark; (Window.Current.Content as Frame).RequestedTheme = ElementTheme.Light; 我写了个sample,但是我不推荐这样搞。你要的话。留言信箱吧

player2135 UID.664133
2018-01-10 回复

Quote东方财富网UWP 发表于 2018-1-10 13:41
在UWP下面。不管你用什么方式。都要去通知UI RequestedTheme 变化了。不然之前的代码也不会生效。 (Window. ...


了解了,谢谢!

本站使用Golang构建,点击此处申请开源鄂ICP备18029942号-4联系站长投诉/举报