C# WPF 响应式布局和抽屉式菜单导航

2020年03月30日 08:20:35   [来源:互联网]   [阅读:-]
字体:【

微信公众号:Dotnet9,网站:Dotnet9,问题或建议,请网站留言; 如果您觉得Dotnet9对您有帮助,欢迎赞赏

C# WPF 响应式布局和抽屉式菜单导航

内容目录

  1. 实现效果
  2. 业务场景
  3. 编码实现
  4. 本文参考
  5. 源码下载

1.实现效果

效果

2.业务场景

常规业务

3.编码实现

3.1 添加Nuget库

使用 .Net Core 3.1 创建名为 “ResponsiveLayout” 的WPF解决方案,添加两个Nuget库:MaterialDesignThemes和MaterialDesignColors。

MaterialDesign控件库

3.2 工程结构

3个文件变动:

  1. App.xaml:添加MD控件样式
  2. MainWindow.xaml:主窗口实现效果
  3. MainWindow.xaml.cs:主窗口后台实现抽屉菜单开和闭

3.3 App.xaml引入MD控件样式

关键样式引用代码

<Application.Resources>    <ResourceDictionary>        <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.DeepPurple.xaml" />            <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Lime.xaml" />        </ResourceDictionary.MergedDictionaries>    </ResourceDictionary></Application.Resources>

3.4 主窗体 MainWindow.xaml

全部代码,菜单及右侧布局

<Window x:Class="ResponsiveLayout.MainWindow"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"        xmlns:local="clr-namespace:ResponsiveLayout"        xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"        mc:Ignorable="d"        Title="MainWindow" Height="450" Width="800">    <Window.Resources>        <Storyboard x:Key="CloseMenu">            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Grid.Width)" Storyboard.TargetName="grid">                <EasingDoubleKeyFrame KeyTime="0" Value="200"/>                <EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="70"/>            </DoubleAnimationUsingKeyFrames>        </Storyboard>        <Storyboard x:Key="OpenMenu">            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Grid.Width)" Storyboard.TargetName="grid">                <EasingDoubleKeyFrame KeyTime="0" Value="70"/>                <EasingDoubleKeyFrame KeyTime="0:0:0.4" Value="200"/>            </DoubleAnimationUsingKeyFrames>        </Storyboard>    </Window.Resources>    <Grid>        <Grid>            <Grid.ColumnDefinitions>                <ColumnDefinition Width="auto"/>                <ColumnDefinition Width="*"/>            </Grid.ColumnDefinitions>            <Grid Background="#FFCBCBCB" Grid.Column="1">                <Grid Margin="0 20 0 0" Background="#FFEEEEEE">                    <Grid Height="100" Background="#FFEEEEEE" VerticalAlignment="Top" HorizontalAlignment="Stretch" Margin="10">                        <Grid.ColumnDefinitions>                            <ColumnDefinition Width="*"/>                            <ColumnDefinition Width="*"/>                            <ColumnDefinition Width="*"/>                            <ColumnDefinition Width="*"/>                        </Grid.ColumnDefinitions>                        <Border BorderBrush="White" BorderThickness="0 0 1 0" Grid.Column="0">                            <TextBlock FontSize="30" Text="R$ 860,90" Foreground="Black" Margin="15"/>                        </Border>                        <Border BorderBrush="White" BorderThickness="0 0 1 0" Grid.Column="1">                            <TextBlock FontSize="30" Text="R$ 750,90" Foreground="Black" Margin="15"/>                        </Border>                        <Border BorderBrush="White" BorderThickness="0 0 1 0" Grid.Column="2">                            <TextBlock FontSize="30" Text="R$ 60,90" Foreground="Black" Margin="15"/>                        </Border>                        <Border BorderBrush="White" BorderThickness="0 0 1 0" Grid.Column="3">                            <TextBlock FontSize="30" Text="R$ 865,90" Foreground="Black" Margin="15"/>                        </Border>                    </Grid>                </Grid>            </Grid>            <Grid x:Name="grid" Width="200" Background="#FF6C6C8D" RenderTransformOrigin="0.5,0.5" Grid.Column="0">                <Button x:Name="button" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="10" Style="{StaticResource MaterialDesignFlatButton}" Click="Button_Click">                    <materialDesign:PackIcon Kind="Menu" Foreground="White"/>                </Button>            </Grid>        </Grid>    </Grid></Window>

3.5 MainWindow.xaml.cs

关键代码,简单的菜单开、闭动画播放

private void Button_Click(object sender, RoutedEventArgs e){    if (MenuClosed)    {        Storyboard openMenu = (Storyboard)button.FindResource("OpenMenu");        openMenu.Begin();    }    else    {        Storyboard closeMenu = (Storyboard)button.FindResource("CloseMenu");        closeMenu.Begin();    }    MenuClosed = !MenuClosed;}

4.本文参考

Design com WPF 大神的学习视频:Responsive Layout and Menu Navigation Drawer
开源控件库:MaterialDesignInXamlToolkit
本站对MD开源控件库的介绍:控件介绍

5.代码下载

Github源码下载:ResponsiveLayout


除非注明,文章均由 Dotnet9 整理发布,欢迎转载。

转载请注明本文地址:https://dotnet9.com/6833.html

推荐阅读:苹果xr跟苹果x哪个好


相关新闻
新闻焦点
提到高血压,似乎人人都知道。你知道血压会升高,但你知道高到多少就算高血压了吗?你知道高血压很常见,但你知道哪些人属于易患高血压的高危人群吗?你知[更多]
引言:从当年《E.T》引爆的雅达利危机,到《星战前线2》被钉在耻辱柱上的视频被踩记录,授权游戏有时就像挥之不去的幽灵,附身在那些或贪得无厌或技不[更多]
近日,王子为台北时装周拍摄了一组写真,演绎了牛仔时尚。写真中,邱胜翊身穿靛蓝色丹宁套装搭配简单大方的白色T恤,脚踩小白鞋,洒脱随性、帅气时髦。[更多]
天气变凉的速度超乎想象,但越来越浓的秋味儿,也让生活多了几分烟火气,各种杂货、美食市集和跳蚤市场,就在这个周末扎堆儿举办,那种人来人往、热火朝天[更多]
关于我们 | 联系我们 | 老版地图 | 网站地图 | 版权声明
版权所有:珠江网讯未经授权禁止复制或建立镜像
相关作品的原创性、文中陈述文字以及内容数据庞杂本站无法一一核实,如果您发现本网站上有侵犯您的合法权益的内容,请联系我们,本网站将立即予以删除!
中国互联网违法和不良信息举报中心 网络警察报警岗亭