使用 MvvmCross 时如何在 WPF App.xaml 中设置资源? (MaterialDesignInXamlToolkit)

Posted

技术标签:

【中文标题】使用 MvvmCross 时如何在 WPF App.xaml 中设置资源? (MaterialDesignInXamlToolkit)【英文标题】:How to set resources in WPF App.xaml when using MvvmCross? (MaterialDesignInXamlToolkit) 【发布时间】:2021-11-08 04:48:16 【问题描述】:

我想在使用 MvvmCross 的新项目中使用 MaterialDesignInXamlToolkit 之类的主题。 (第一次使用)

由于我无法在 MvxApplication 中设置资源,我应该如何处理?

我的 App.xaml

<views:MvxApplication  
    xmlns:views="clr-namespace:MvvmCross.Platforms.Wpf.Views;assembly=MvvmCross.Platforms.Wpf"  
    x:Class="Overseer.Client.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:Overseer.Client"
             StartupUri="MainWindow.xaml">
</views:MvxApplication >

通常我会这样做。

<Application . . .
    xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <materialDesign:BundledTheme BaseTheme="Light" PrimaryColor="DeepPurple" SecondaryColor="Lime" />
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

【问题讨论】:

也许这会有所帮助:***.com/questions/55056085/… 【参考方案1】:

制作了一个 ResourceDictionary 文件。

MaterialDesign.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
        <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
        <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.Grey.xaml" />
        <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.LightBlue.xaml" />
        <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.TextBox.xaml" />
    </ResourceDictionary.MergedDictionaries>

    <SolidColorBrush x:Key="PrimaryHueLightBrush" Color="StaticResource Primary100"/>
    <SolidColorBrush x:Key="PrimaryHueLightForegroundBrush" Color="StaticResource Primary100Foreground"/>

</ResourceDictionary>

在 XAML 中分别放在每个视图中。

<views:MvxWpfView.Resources>
    <ResourceDictionary Source="..\Themes/MaterialDesign.xaml"></ResourceDictionary>
</views:MvxWpfView.Resources>

如果有人有办法在全球范围内设置它,请告诉我。

【讨论】:

您是否尝试以编程方式设置它? Application.Current.ResourceDictionary = new ResourceDictionary() Source = new Uri("...") ;

以上是关于使用 MvvmCross 时如何在 WPF App.xaml 中设置资源? (MaterialDesignInXamlToolkit)的主要内容,如果未能解决你的问题,请参考以下文章

MVVM 跨 WPF 区域实现

如何将 Xamarin Forms Shell 集成到 MvvmCross 设置中

如何将 Xamarin Forms Shell 集成到 MvvmCross 设置中

MvvmCross 4 和 Xamarin.iOS -> 使用 Storyboard 时如何从 Core 加载视图控制器?

如何在 iOS 中使用没有故事板的 MvvmCross?

如何在 mvvmcross 视图模型中使用异步?