当前位置:   article > 正文

WPF Material DesignInXaml 入坑

materialdesigninxaml

108ec5ffccdaa28d6cc7e9fb300bff59.png

背景

改造已有winform项目,原有项目包含多种第三方插件

介绍

WPF Material Design 是一种基于 Windows Presentation Foundation(WPF)框架的设计风格,旨在为桌面应用程序提供现代、富有层次感的用户界面。

它结合了Google的Material Design理念,突显实用性和美观性,为开发人员提供了一套丰富的控件、动画和样式,以改善用户体验。

这个设计风格注重阴影、动画和色彩的运用,使界面看起来更加生动、有层次。

WPF Material Design简化了开发流程,开发者可以轻松地集成这些现代化的设计元素,从而创建出符合当今用户期望的高质量应用程序。

完全开源,是 WPF 最流行的 GUI 库之一,该库还与 MahApps 和 Dragablz 兼容。

特性

  • 现代化设计风格:基于Google的Material Design理念,采用现代、扁平、富有层次感的设计元素,使用户界面看起来更加时尚和符合当代趋势。

  • 丰富的控件库:提供了一套丰富的现成控件,包括按钮、文本框、卡片等,这些控件都经过设计,使得开发者能够轻松构建符合Material Design标准的应用程序。

  • 动画效果:强调运用动画增强用户体验,如过渡效果、按钮点击效果等,使界面更生动、引人注目。

  • 色彩和图标的规范化:Material Design 强调使用清晰、鲜艳的色彩,以及简单直观的图标,有助于提高用户认知和操作的便捷性。

  • 阴影和深度感:通过巧妙运用阴影效果,为界面元素增加深度感,使用户更容易理解界面的层次结构和交互关系。

  • 可定制性:虽然提供了一套默认的设计元素,但也允许开发者根据自己的需求进行定制,以满足特定应用程序的设计要求。

  • 支持高分辨率屏幕:考虑了高分辨率显示屏的使用,确保应用程序在各种屏幕尺寸和分辨率下都能够展现出最佳的外观。

官方预览模板

下载https://github.com/MaterialDesignInXAML/MaterialDesignInXamlToolkit/releases

33c4aba2aa0ec35cee3620cef33bd866.png

本地启动启动 MaterialDesignDemo.exe,可以查看多种官方示例组件

1c123420d9914f50464ce070d6dac376.png

91beacfcb45b91a2a71ec000bed8ff75.png

VS2022中新建wpf项目

选择.net版本

1150fa293dfd170b9dacb465a1542fa0.png

NuGet添加MaterialDesign依赖

c58be857752acd8cdeb78a09f0280ece.png

9ca6e0ad9e965ea7ad6efa0b0c1df48b.png

8a9b67fb187b7037a9e78a07bd125c1a.png

配置App.xaml

<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />

完整配置App.xaml

  1. <Application.Resources>
  2. <ResourceDictionary>
  3. <ResourceDictionary.MergedDictionaries>
  4. <materialDesign:CustomColorTheme BaseTheme="Light" PrimaryColor="Aqua" SecondaryColor="DarkGreen" />
  5. <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
  6. <!-- <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" /> -->
  7. <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesign3.Defaults.xaml" />
  8. <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.DeepPurple.xaml" />
  9. </ResourceDictionary.MergedDictionaries>
  10. </ResourceDictionary>
  11. </Application.Resources>

注意:MaterialDesign 5.0 版本中已修改文件名 MaterialDesignTheme.Defaults.xaml 替代为 MaterialDesign2.Defaults.xaml and MaterialDesign3.Defaults.xaml

详细变更可参考:https://github.com/MaterialDesignInXAML/MaterialDesignInXamlToolkit/discussions/3466

MainWindow.xaml添加内容

  1. <materialDesign:DialogHost    DialogTheme="Inherit"
  2. DialogContentUniformCornerRadius="20">
  3. <materialDesign:DialogHost.DialogContent>
  4. <StackPanel Margin="16">
  5. <TextBlock Text="Add a new fruit." />
  6. <TextBox x:Name="FruitTextBox" Margin="0,8,0,0"
  7. HorizontalAlignment="Stretch" />
  8. <StackPanel HorizontalAlignment="Right"
  9. Orientation="Horizontal">
  10. <Button Margin="0,8,8,0"
  11. Command="{x:Static materialDesign:DialogHost.CloseDialogCommand}"
  12. Content="ACCEPT"
  13. IsDefault="True"
  14. Style="{StaticResource MaterialDesignFlatButton}">
  15. <Button.CommandParameter>
  16. <system:Boolean xmlns:system="clr-namespace:System;assembly=mscorlib">
  17. True
  18. </system:Boolean>
  19. </Button.CommandParameter>
  20. </Button>
  21. <Button Margin="0,8,8,0"
  22. Command="{x:Static materialDesign:DialogHost.CloseDialogCommand}"
  23. Content="CANCEL"
  24. IsCancel="True"
  25. Style="{StaticResource MaterialDesignFlatButton}">
  26. <Button.CommandParameter>
  27. <system:Boolean xmlns:system="clr-namespace:System;assembly=mscorlib">
  28. False
  29. </system:Boolean>
  30. </Button.CommandParameter>
  31. </Button>
  32. </StackPanel>
  33. </StackPanel>
  34. </materialDesign:DialogHost.DialogContent>
  35. <Border MinHeight="256"
  36. BorderBrush="{DynamicResource PrimaryHueMidBrush}"
  37. BorderThickness="1"
  38. ClipToBounds="True">
  39. <Grid>
  40. <Grid.RowDefinitions>
  41. <RowDefinition Height="*" />
  42. <RowDefinition Height="Auto" />
  43. </Grid.RowDefinitions>
  44. <ListBox x:Name="FruitListBox">
  45. <ListBoxItem Content="Apple" />
  46. <ListBoxItem Content="Banana" />
  47. <ListBoxItem Content="Pear" />
  48. </ListBox>
  49. <materialDesign:ColorZone Grid.Row="1"
  50. Effect="{DynamicResource MaterialDesignShadowDepth5}"
  51. Mode="PrimaryMid">
  52. <TextBlock Margin="16"
  53. Text="Fruit Bowl" />
  54. </materialDesign:ColorZone>
  55. <Button Grid.Row="0"
  56. Margin="0,0,28,-20"
  57. HorizontalAlignment="Right"
  58. VerticalAlignment="Bottom"
  59. Command="{x:Static materialDesign:DialogHost.OpenDialogCommand}"
  60. Content="{materialDesign:PackIcon Kind=Plus, Size=22}"
  61. Style="{StaticResource MaterialDesignFloatingActionMiniSecondaryButton}" />
  62. </Grid>
  63. </Border>
  64. </materialDesign:DialogHost>

编译运行

3aeede8c39cad7686e211c1f1e0408aa.png

56bfd134d960a294dae01bb8c7c68063.png

除了使用官方定义的主题外,还可以手动指定主题颜色

  1. #修改 PrimaryColor和SecondaryColor值为自定义RGB颜色
  2. <materialDesign:CustomColorTheme BaseTheme="Light" PrimaryColor="#494949" SecondaryColor="#408400" />

效果:

4dc79df46073f3470f002fd456cd1798.png

相较于AvaloniaUI来说,MaterialDesignInXAML适合老项目改造升级,在适配winform、wpf等原生组件上有明显优势,而前者更适合新项目开发,来满足应用的跨平台性

3bc68b045c5f5ec0c0c41f60561aa9bf.jpeg

fd2ca2cd10721a25e0f89349e29b63df.gif

ea91c0085cef439ea18b925478efbf24.png

c80fa7c8e3c980585fe74c71686a7983.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/480705
推荐阅读
相关标签
  

闽ICP备14008679号