gpt4 book ai didi

xaml - window 电话 : how to change the Application style programmatically

转载 作者:行者123 更新时间:2023-12-01 06:35:51 27 4
gpt4 key购买 nike

在我的 Windows Phone 8 应用程序中,我在位置 处的 xaml 文件中定义了一些隐式样式。/Styles/DefaultStyles.xaml

我有一个类似的文件,但具有不同的颜色、字体等...定义于 /Styles/GreenStyles.xaml .

我在 App.xaml 中引用了默认样式文件,如下所示:

<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles/DefaultStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>

我想让我的应用程序以编程方式从其他样式文件 (GreenStyles) 切换其隐式样式。

我怎样才能做到这一点?

**

UPDATE:



我设法更改资源字典的来源如下:
ResourceDictionary style = App.Current.Resources.MergedDictionaries.ToList()[0];
string source = String.Format("/ApplicationName;component/Styles/GreenStyles.xaml");
style.Source = new Uri(source, UriKind.Relative);

注:单词组件必须这样写以避免异常

现在我有一个问题:
只有 隐式样式 (没有 x:Key 属性的那些)在字典来源改变时被切换。

具有指定键并在两个文件中定义两次(具有不同属性)的任何其他样式都不会反射(reflect)在 UI 中。

所以如果我有这些文件:
DefaultStyles.xaml:

    <Style x:Key="MainGrid" TargetType="Grid">
<Setter Property="Background" Value="Red"/>
</Style>

<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="Red"/>
<Setter Property="FontSize" Value="24"/>
</Style>
</ResourceDictionary>

和:
GreenStyles.xaml:

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone">

<Style x:Key="MainGrid" TargetType="Grid">
<Setter Property="Background" Value="Green"/>
</Style>

<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="Green"/>
<Setter Property="FontSize" Value="24"/>
</Style>
</ResourceDictionary>

我将源切换到指向 GreenStyles.xaml , 任何样式为 的网格主网格 仍然会有它的背景红色 .

这可能是什么原因?

最佳答案

您可以尝试使用 Jeff Wilcox 在此处描述的方法:http://www.jeff.wilcox.name/2012/01/phonethememanager/

此处描述了 Silverlight 的替代方法,我不确定这是否适用于 Windows Phone(尽管它们共享一些代码库):
http://silverlightips.wordpress.com/2010/04/29/change-themestyle-using-merged-dictionaries/

如果您有一个大型应用程序,这两种方法都不容易,您可以考虑另一种选择,例如(叫我疯了)

<Button Style="{Binding Locator.Theme, Converter={StaticResource StyleThemeConverter}, ConverterParameter=RefreshButtonStyle}"

希望这可以帮助。

关于xaml - window 电话 : how to change the Application style programmatically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15133047/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com