查看: 1424|回复: 10

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

[复制链接]

签到天数: 933 天

连续签到: 13 天

[LV.10]以坛为家III

32

主题

1889

积分

283

支持

发表于 2018-1-8 23:30:24 来自手机 | 显示全部楼层 |阅读模式

马上注册,享受积分奖励和更多功能,让您轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
不要那种改RequestedTheme的值的,今天晚上想了很多办法都不行,本来以为像web里面切换css文件一样简单的。。
不会真的要一个一个控件去改颜色吧。。
来自:Z97X-Gaming 7 WIN10 PC版客户端

签到天数: 312 天

连续签到: 1 天

[LV.8]以坛为家I

24

主题

936

积分

3

支持

发表于 2018-1-9 13:47:32 来自手机 | 显示全部楼层
去官博看吧……

来自:Lumia Icon -智机社区客户端
[你知道吗]:

签到天数: 473 天

连续签到: 2 天

[LV.9]以坛为家II

15

主题

801

积分

48

支持

官方认证

Rank: 6Rank: 6

积分
801
发表于 2018-1-9 16:52:56 来自手机 | 显示全部楼层
写2个theme。。你需要修改颜色属性的控件使用ThemeResource。。把根frame的RequestedTheme 切换下。。


来自:80V4 WIN10 PC版客户端
[你知道吗]:

签到天数: 473 天

连续签到: 2 天

[LV.9]以坛为家II

15

主题

801

积分

48

支持

官方认证

Rank: 6Rank: 6

积分
801
发表于 2018-1-9 16:53:48 来自手机 | 显示全部楼层
你说 本来以为像web里面切换css文件一样简单的 ,说明你没弄懂XAML的工作原理。。
来自:80V4 WIN10 PC版客户端

签到天数: 933 天

连续签到: 13 天

[LV.10]以坛为家III

32

主题

1889

积分

283

支持

 楼主| 发表于 2018-1-9 21:15:34 来自手机 | 显示全部楼层
东方财富网UWP 发表于 2018-1-9 16:53
你说 本来以为像web里面切换css文件一样简单的 ,说明你没弄懂XAML的工作原理。。 ...

其实搞明白了,XAML其实相当于先编译后运行,不像Web是解释型的,关键其实不怎么想用RequestedTheme去做,相当于被限制了只能有两个主题。。
来自:Z97X-Gaming 7 WIN10 PC版客户端
[你知道吗]:

签到天数: 933 天

连续签到: 13 天

[LV.10]以坛为家III

32

主题

1889

积分

283

支持

 楼主| 发表于 2018-1-9 21:21:13 来自手机 | 显示全部楼层
东方财富网UWP 发表于 2018-1-9 16:52
写2个theme。。你需要修改颜色属性的控件使用ThemeResource。。把根frame的RequestedTheme 切换下。。
[qpi ...

谢谢了,就这样搞算了,关键其实按我的想法,微软完全可以做成ThemeDictionaries里面的ResourceDictionary可以设置IsEnabled就行了
来自:Z97X-Gaming 7 WIN10 PC版客户端

签到天数: 473 天

连续签到: 2 天

[LV.9]以坛为家II

15

主题

801

积分

48

支持

官方认证

Rank: 6Rank: 6

积分
801
发表于 2018-1-10 10:53:39 来自手机 | 显示全部楼层
player2135 发表于 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下砍掉估计也是性能问题
来自:80V4 WIN10 PC版客户端
[你知道吗]:

签到天数: 933 天

连续签到: 13 天

[LV.10]以坛为家III

32

主题

1889

积分

283

支持

 楼主| 发表于 2018-1-10 12:49:37 来自手机 | 显示全部楼层
东方财富网UWP 发表于 2018-1-10 10:53
no no no, 系统的theme 是只有2个。但是你自己可以扩展哇。比如红色主题,你可以把 light theme里面的Mer ...

可以这样啊?求问MergedDictionaries怎么实现呢?
来自:MS-7A69 WIN10 PC版客户端

签到天数: 473 天

连续签到: 2 天

[LV.9]以坛为家II

15

主题

801

积分

48

支持

官方认证

Rank: 6Rank: 6

积分
801
发表于 2018-1-10 13:13:46 来自手机 | 显示全部楼层
player2135 发表于 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") });

大概是这样的

来自:80V4 WIN10 PC版客户端
[你知道吗]:

签到天数: 473 天

连续签到: 2 天

[LV.9]以坛为家II

15

主题

801

积分

48

支持

官方认证

Rank: 6Rank: 6

积分
801
发表于 2018-1-10 13:41:42 来自手机 | 显示全部楼层
在UWP下面。不管你用什么方式。都要去通知UI RequestedTheme 变化了。不然之前的代码也不会生效。
(Window.Current.Content as Frame).RequestedTheme = ElementTheme.Dark;
(Window.Current.Content as Frame).RequestedTheme = ElementTheme.Light;

我写了个sample,但是我不推荐这样搞。你要的话。留言信箱吧
来自:80V4 WIN10 PC版客户端
您需要登录后才可以回帖 登录 | 注册

本版积分规则

        

网站地图| 小黑屋|京ICP证150706号|京B2-20160045|京网文[2018]3705-313号| 京公网安备11010802018258号

Powered by Discuz! X3.4 / Copyright 2010-2017 © 智机网 WFUN.COM Inc. All rights reserved.

快速回复 返回顶部 返回列表