在 WPF 中的 ResourceDictionary 资源字典大部分都是在 XAML 里面定义的,但是在 C# 代码定义一个资源字典也是可行的,只是写起来有点诡异 在 CSharp 后台代码里面给 WPF 定义资源字典需要重新创建一个类,让这个类继承 ResourceDictionary 如以下代码 public class Foo : ResourceDictionary { } 然后在构造函数里面加入测试的代码,添加一个颜色作为资源 public class Foo : ResourceDictionary { public Foo() > <ResourceDictionary.MergedDictionaries> <local:Foo></local:Foo> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Window.Resources> <
本文来和大家聊聊在 WPF 里面在给 ResourceDictionary 设置 Source 属性时,在 WPF 框架里面做了哪些逻辑 默认添加 Source 时都是指定 WPF 自身的 XAML 资源字典 其实在 WPF 的 ResourceDictionary 的 Source 属性赋值里面有很长的一段逻辑,如下面代码,请大家快速跳过,这些代码只是用来告诉大家,在 WPF 里面使用了很多代码来处理这部分逻辑 System.Windows.Markup.XamlReader asyncObjectConverter; ResourceDictionary loadedRD = 第二层内容就是 private ObservableCollection<ResourceDictionary> _mergedDictionaries 被这个资源字典合并的其他资源字典里面 因此在 WPF 属性_jiangxinyu的专栏-CSDN博客 WPF之ResourceDictionary资源字典_LADT的博客-CSDN博客 WPF 资源字典ResourceDictionary使用_Stay
本文将记录一些在 WPF 里面,使用 StaticResource 将 ResourceDictionary 玩坏的做法。 -- <ResourceDictionary Source="Dictionary1.xaml"></ResourceDictionary> --> <ResourceDictionary Source="Dictionary2.xaml"></ResourceDictionary> </ResourceDictionary.MergedDictionaries /> <ResourceDictionary Source="Dictionary2.xaml"></ResourceDictionary> < /ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> <
> <ResourceDictionary.MergedDictionaries> <! -- Theme setting --> <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component /Styles/Themes/Light.Blue.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary <Controls:MetroWindow.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries /Dark.Red.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Controls
> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,, ,/Panuon.UI.Silver;component/Control.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary 如果我们引用的有其他的样式 <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,,,/Resources/OverwrideDefaultControlStyles.xaml" /> <ResourceDictionary > </ResourceDictionary> </Application.Resources> STEP 3.
在 WPF 中,使用 ResourceDictionary 本身不会受到创建线程同步影响,意味着可以在任意的线程创建 ResourceDictionary 资源字典,然后在任意线程使用。 在 ResourceDictionary 有一个 CanBeAccessedAcrossThreads 属性用来决定在进行读写的时候是否加上锁,但这个属性是内部的,需要通过黑科技更改才能用上 依据 WPF .SetCanBeAccessedAcrossThreads(resourceDictionary); 此时通过 VS 的自动变量,可以看到 resourceDictionary 变量的 CanBeAccessedAcrossThreads .SetCanBeAccessedAcrossThreads(resourceDictionary); resourceDictionary.Add("Foo", "Fx = new ResourceDictionary(); Task.Run(() => { for (int i = 0
具体可参考UWPCommunityToolkit的做法: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/ " /> <ResourceDictionary Source="ms-appx:///Microsoft.Toolkit.Uwp.UI.Controls/SlidableListItem /PullToRefreshListView/PullToRefreshListView.xaml" /> <ResourceDictionary Source="ms-appx:/// Microsoft.Toolkit.Uwp.UI.Controls/RotatorTile/RotatorTile.xaml" /> <ResourceDictionary Source ="ms-appx:///Microsoft.Toolkit.Uwp.UI.Controls/BladeView/BladeView.xaml" /> <ResourceDictionary
使用说明 在 WPF 项目的 App.Xaml 中引用: <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries > <ResourceDictionary Source="pack://application:,,,/Rubyer;component/Themes/Generic.xaml " /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources <SolidColorBrush x:Key="Question" Color="#2196F3" /> 部分控件含有中文文字说明,例如 PageBar 等,目前可支持切换至中英文; <ResourceDictionary
WT.mc_id=WDIT-MVP-5004326 Part2 控件库 1.Nuget安装:MaterialDesignInXamlToolkit 2.选择主题 Light theme:<ResourceDictionary application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" /> Dark theme: <ResourceDictionary > <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack ,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" /> <ResourceDictionary > </ResourceDictionary> </Application.Resources> </Application> 4.配置View <Window
ResourceDictionary dict = new ResourceDictionary(); LinearGradientBrush bgBrush = new LinearGradientBrush > <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source = "Style/Common.xaml " /> </ResourceDictionary.MergedDictionaries > </ResourceDictionary > </Application.Resources Color="red" x:Key="muddyBrush"/> <ResourceDictionary.MergedDictionaries> <ResourceDictionary <ResourceDictionary.ThemeDictionaries> <ResourceDictionary x:Key="Default"> <x:String x:Key
clr-namespace:ZConverter" StartupUri="Wins/WelcomeWin.xaml"> <Application.Resources> <ResourceDictionary > <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack ://application:,,,/Resources/OverwrideDefaultControlStyles.xaml" /> </ResourceDictionary.MergedDictionaries > <zConverter:TongjiBgConverter x:Key="BgConv" /> </ResourceDictionary> </Application.Resources
> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="SedpwbvkKbrjlpi.xaml "/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Page.Resources > <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="SedpwbvkKbrjlpi.xaml "/> <ResourceDictionary Source="KlgnkTbyt.xaml"/> </ResourceDictionary.MergedDictionaries </ResourceDictionary.ThemeDictionaries> </ResourceDictionary> </Page.Resources> <TextBlock
> <ResourceDictionary Source="DictionaryC.xaml"/> </d:ResourceDictionary.MergedDictionaries > <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="DictionaryC.xaml > <ResourceDictionary Source="DictionaryD.xaml"/> </ResourceDictionary.MergedDictionaries > <ResourceDictionary Source="DictionaryC.xaml"/> <ResourceDictionary Source="DictionaryB.xaml "/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> 依然在 DictionaryC.xaml 里面定义资源 <ResourceDictionary
我根据原文说的新建几个资源叫LightThemeDictionary、DarkThemeDictionary,一个是白天颜色,一个是黑暗 然后我们在我们的资源写入几个资源 <ResourceDictionary > 然后我们需要在前台把资源放在Page <Page.Resources> <ResourceDictionary> <ResourceDictionary.ThemeDictionaries > <ResourceDictionary x:Key="Light" Source="View/DarkThemeDictionary.xaml"></ResourceDictionary > <ResourceDictionary x:Key="Dark" Source="View/LightThemeDictionary.xaml"></ResourceDictionary > </ResourceDictionary.ThemeDictionaries> </ResourceDictionary> </Page.Resources
我根据原文说的新建几个资源叫LightThemeDictionary、DarkThemeDictionary,一个是白天颜色,一个是黑暗 然后我们在我们的资源写入几个资源 <ResourceDictionary > 然后我们需要在前台把资源放在Page <Page.Resources> <ResourceDictionary> <ResourceDictionary.ThemeDictionaries > <ResourceDictionary x:Key="Light" Source="View/DarkThemeDictionary.xaml"></ResourceDictionary > <ResourceDictionary x:Key="Dark" Source="View/LightThemeDictionary.xaml"></ResourceDictionary > </ResourceDictionary.ThemeDictionaries> </ResourceDictionary> </Page.Resources
全局资源样式属性
App.xaml
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries >
<ResourceDictionary Source="Dictionary.xaml"/>
</ResourceDictionary.MergedDictionaries --<Setter Property="Background" Value="Red"/>-->
</Style>
</ResourceDictionary>
App.xaml
<Application >
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/UI /ControlStyle.xaml"></ResourceDictionary>
<!
那么,完整的资源文件可以定义为这样: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation " xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <ResourceDictionary.ThemeDictionaries > <ResourceDictionary x:Key="Default"> <AcrylicBrush x:Key="CMapUwpAcrylicBrush" > <ResourceDictionary x:Key="Light"> <AcrylicBrush x:Key="CMapUwpAcrylicBrush" > </ResourceDictionary.ThemeDictionaries> </ResourceDictionary> 然后在需要使用亚克力的地方,就能用自定义材质了: <Grid Background
xmlns:ui="http://schemas.modernwpf.com/2019"> <Application.Resources> <ResourceDictionary > <ResourceDictionary.MergedDictionaries> <ui:ThemeResources /> <ui:XamlControlsResources /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary
主题引入项目 在 NuGet 包管理器中搜索 Rubyer 安装: 在 WPF 项目的 App.Xaml 中引用: <Application.Resources> <ResourceDictionary > <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack ://application:,,,/Rubyer;component/Themes/Generic.xaml" /> </ResourceDictionary.MergedDictionaries > </ResourceDictionary> </Application.Resources> 项目源码运行 设置 RubyerDemo 为启动项目运行查看效果: 运行效果展示 项目源码地址
Property="FontSize" Value="35"/> </Style> 引用: 在需要引用的视图中把编写好的样式合并进来: <UserControl.Resources> <ResourceDictionary > <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source=".. /Styles/TestStyle.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary