【问题标题】:Xamarin.Forms: Performance differences in using DynamicResource over StaticResourceXamarin.Forms:使用 DynamicResource 而不是 StaticResource 的性能差异
【发布时间】:2021-09-16 06:05:30
【问题描述】:

我看到了一些关于使用 DynamicResource 与 StaticResource 的性能差异的问题,但主要是 WPF 而不是 Xamarin.Forms 移动应用程序。

我的问题是围绕一个特定的用例进行的:

我有一个应用程序,目前仅使用 StaticResources,但需要能够拥有能够在运行时更改样式/主题的应用程序“风味”(由内部构建时间标志确定)——在应用初始化时通过 API 控制的变量。

因此,我目前面临需要更改 XAML 布局中的所有 StaticResource 引用以使用 DynamicResource 的情况。 这对性能有何影响?

或者,是否可以编写我自己的标记扩展来返回是否应该使用 DynamicResource 或 StaticResource,具体取决于当前设置的内部“风味”标志?因此,如果风味不需要这样做,我就不需要发布引用动态资源的代码。

【问题讨论】:

    标签: c# xaml xamarin.forms dynamicresource


    【解决方案1】:

    根据官方文档Dynamic Styles in Xamarin.Forms

    DynamicResource 标记扩展类似于 StaticResource 标记扩展,两者都使用字典键来获取值 来自资源字典。然而,虽然 StaticResource 执行 单个字典查找,DynamicResource 维护一个链接到 字典键。因此,如果字典条目与 键被替换,更改应用于视觉元素。这 允许在应用程序中进行运行时样式更改。

    编辑: 如果它们都存在,动态资源将覆盖静态资源。 我做了一个关于将静态资源更改为动态的测试。

    Xmal:

     <ContentPage.Resources>
            <Style TargetType="Label">
                <Setter Property="FontAttributes"
                        Value="Bold"/>
                <Setter Property="TextColor"
                        Value="Red"/>
            </Style>
        </ContentPage.Resources>
        <ContentPage.Content>
            <StackLayout>
                <Label Text="Welcome to Xamarin.Forms!" x:Name="MyLabel"/>
                <Button Clicked="OnButton_Clicked"/>
            </StackLayout>
        </ContentPage.Content>
    

    代码隐藏:

    public Page1(bool IsDynamic)
        {
            var dynamicstyle = new Style(typeof(Label)) {
                Setters = { new Setter { Property=Label.FontProperty,
                Value="Bold"},
                new Setter{
                Property=Label.TextColorProperty,
                Value="Blue"} }
            };
            InitializeComponent();
            if (IsDynamic)
            { MyLabel.Style = dynamicstyle; }
        }
        private void OnButton_Clicked(object sender,EventArgs e)
        {
            Navigation.PushAsync(new Page1(true));
    
        }
    

    【讨论】:

    • 谢谢,我看过文档,但并没有真正回答我的问题
    • 我创建了一个示例页面,你可以查看
    • 我同意,这个答案没有解决性能问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 2013-01-18
    • 2012-12-29
    相关资源
    最近更新 更多