C# WPF抽屉式侧边栏导航栏 炫酷漂亮效果 MD主题重绘原生控件的美观效果 提供源码Demo下载

源码Demo下载链接:https://download.csdn.net/download/liyu3519/16620649

使用C#-WPF实现抽屉效果-炫酷漂亮的侧边栏导航菜单-SplitView+MD主题重绘原生控件的美观效果-提供源码Demo下载

1.使用Nuget安装MaterialDesignThemes

  2.在App.xaml的<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.Blue.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Indigo.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>

3.界面XAML中添加以下代码

    <Window.Resources>
        <Storyboard x:Key="MenuOpen">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Width)" Storyboard.TargetName="GridMenu">
                <EasingDoubleKeyFrame KeyTime="0" Value="60"/>
                <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="200"/>
            </DoubleAnimationUsingKeyFrames>
        </Storyboard>
        <Storyboard x:Key="MenuClose">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Width)" Storyboard.TargetName="GridMenu">
                <EasingDoubleKeyFrame KeyTime="0" Value="200"/>
                <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="60"/>
            </DoubleAnimationUsingKeyFrames>
        </Storyboard>
    </Window.Resources>

    <Window.Triggers>
        <EventTrigger RoutedEvent="ButtonBase.Click" SourceName="ButtonOpenMenu">
            <BeginStoryboard Storyboard="{StaticResource MenuOpen}"/>
        </EventTrigger>
        <EventTrigger RoutedEvent="ButtonBase.Click" SourceName="ButtonCloseMenu">
            <BeginStoryboard Storyboard="{StaticResource MenuClose}"/>
        </EventTrigger>
    </Window.Triggers>

    <Grid Background="LightGray">
        <Grid x:Name="GridTitle" Height="50" VerticalAlignment="Top" Background="#FF1368BD" MouseDown="GridTitle_MouseDown" Margin="60,0,0,0">
            <TextBlock Text="抽屉式菜单风格-材料设计主题控件" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="22" Foreground="White"/>
            <StackPanel VerticalAlignment="Center" Orientation="Horizontal" HorizontalAlignment="Right">
                <TextBlock Text="欢迎使用" VerticalAlignment="Center" FontSize="14" Foreground="White"/>
                <materialDesign:PopupBox Foreground="White" Margin="10" PlacementMode="BottomAndAlignRightEdges" StaysOpen="False">
                    <StackPanel Width="150">
                        <Button Content="账号"/>
                        <Button Content="设置"/>
                        <Button Content="帮助"/>
                        <Separator/>
                        <Button Content="最小化"/>
                        <Button Content="最大化"/>
                        <Button x:Name="ButtonPopUpLogout" Content="退出" Click="ButtonPopUpLogout_Click"/>
                    </StackPanel>
                </materialDesign:PopupBox>
            </StackPanel>
        </Grid>

        <Grid x:Name="GridMenu" Width="60" HorizontalAlignment="Left" Background="#FF1B3861" Margin="0" SizeChanged="GridMenu_SizeChanged">
            <StackPanel>
                <Grid Background="#FF1368BD">
                    <Button x:Name="ButtonCloseMenu" Width="60" Height="50" Background="{x:Null}" BorderBrush="{x:Null}" VerticalAlignment="Top" HorizontalAlignment="Right" Visibility="Collapsed" Click="ButtonCloseMenu_Click">
                        <materialDesign:PackIcon Kind="ArrowLeft" Foreground="#FF1B3861" Width="25" Height="25"/>
                    </Button>
                    <Button x:Name="ButtonOpenMenu" Width="60" Height="50" Background="{x:Null}" BorderBrush="{x:Null}" VerticalAlignment="Top" HorizontalAlignment="Right" Click="ButtonOpenMenu_Click">
                        <materialDesign:PackIcon Kind="Menu" Foreground="#FF1B3861" Width="25" Height="25"/>
                    </Button>
                </Grid>
                <ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" Foreground="#FF1368BD">
                    <ListViewItem Height="60" MouseLeftButtonUp="ListViewItem_MouseLeftButtonUp">
                        <StackPanel Orientation="Horizontal">
                            <materialDesign:PackIcon Kind="ViewDashboard" Width="25" Height="25" Margin="10" VerticalAlignment="Center" />
                            <TextBlock Text="系统首页" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
                        </StackPanel>
                    </ListViewItem>
                    <ListViewItem Height="60" MouseLeftButtonUp="ListViewItem_MouseLeftButtonUp">
                        <StackPanel Orientation="Horizontal">
                            <materialDesign:PackIcon Kind="DebugStepOver" Width="25" Height="25" Margin="10" VerticalAlignment="Center"/>
                            <TextBlock Text="设备调试" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
                        </StackPanel>
                    </ListViewItem>
                    <ListViewItem Height="60" MouseLeftButtonUp="ListViewItem_MouseLeftButtonUp">
                        <StackPanel Orientation="Horizontal">
                            <materialDesign:PackIcon Kind="Settings" Width="25" Height="25" Margin="10" VerticalAlignment="Center"/>
                            <TextBlock Text="参数设置" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
                        </StackPanel>
                    </ListViewItem>
                    <ListViewItem Height="60" MouseLeftButtonUp="ListViewItem_MouseLeftButtonUp">
                        <StackPanel Orientation="Horizontal">
                            <materialDesign:PackIcon Kind="Text" Width="25" Height="25" Margin="10" VerticalAlignment="Center"/>
                            <TextBlock Text="工作记录" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
                        </StackPanel>
                    </ListViewItem>
                    <ListViewItem Height="60" MouseLeftButtonUp="ListViewItem_MouseLeftButtonUp">
                        <StackPanel Orientation="Horizontal">
                            <materialDesign:PackIcon Kind="User" Width="25" Height="25" Margin="10" VerticalAlignment="Center"/>
                            <TextBlock Text="用户中心" VerticalAlignment="Center" Margin="20 10" Foreground="White"/>
                        </StackPanel>
                    </ListViewItem>
                </ListView>
            </StackPanel>

        </Grid>

        <Grid x:Name="gdMian" Background="White" Margin="60,50,0,0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <GroupBox>
                <GroupBox.Header>
                    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center" >
                        <materialDesign:PackIcon Kind="Billboard" HorizontalAlignment="Center" VerticalAlignment="Center" Width="18" Height="18" Foreground="White"/>
                        <TextBlock Text="控件效果1" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White"/>
                    </StackPanel>
                </GroupBox.Header>
                <TabControl>
                    <TabItem>
                        <TabItem.Header>
                            <StackPanel Orientation="Horizontal">
                                <materialDesign:PackIcon Kind="Tab"/>
                                <TextBlock Text="选项卡1"/>
                            </StackPanel>
                        </TabItem.Header>
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="50"/>
                                <RowDefinition Height="50"/>
                                <RowDefinition Height="50"/>
                                <RowDefinition Height="50"/>
                                <RowDefinition Height="50"/>
                                <RowDefinition Height="50"/>
                                <RowDefinition Height="50"/>
                                <RowDefinition Height="50"/>
                                <RowDefinition Height="*"/>
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="*"/>
                            </Grid.ColumnDefinitions>
                            <Button HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Row="0" Grid.Column="0">
                                <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
                                    <materialDesign:PackIcon Kind="GestureTapButton" HorizontalAlignment="Center" VerticalAlignment="Center" Width="18" Height="18"/>
                                    <TextBlock Text="按钮控件" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                                </StackPanel>
                            </Button>
                            <Button HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Row="0" Grid.Column="1" Background="#FFB821F3" BorderBrush="#FFB821F3">
                                <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
                                    <materialDesign:PackIcon Kind="GestureTapButton" HorizontalAlignment="Center" VerticalAlignment="Center" Width="18" Height="18"/>
                                    <TextBlock Text="按钮控件" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                                </StackPanel>
                            </Button>
                            <Button HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Row="0" Grid.Column="2" Background="#FFF39421" BorderBrush="#FFF39421">
                                <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
                                    <materialDesign:PackIcon Kind="GestureTapButton" HorizontalAlignment="Center" VerticalAlignment="Center" Width="18" Height="18"/>
                                    <TextBlock Text="按钮控件" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                                </StackPanel>
                            </Button>

                            <Button HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Row="1" Grid.Column="0" Background="{x:Null}" Foreground="#2196F3">
                                <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
                                    <materialDesign:PackIcon Kind="GestureTapButton" HorizontalAlignment="Center" VerticalAlignment="Center" Width="18" Height="18"/>
                                    <TextBlock Text="按钮控件" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                                </StackPanel>
                            </Button>
                            <Button HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Row="1" Grid.Column="1"  BorderBrush="#FFB821F3"  Background="{x:Null}" Foreground="#FFB821F3">
                                <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
                                    <materialDesign:PackIcon Kind="GestureTapButton" HorizontalAlignment="Center" VerticalAlignment="Center" Width="18" Height="18"/>
                                    <TextBlock Text="按钮控件" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                                </StackPanel>
                            </Button>
                            <Button HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Row="1" Grid.Column="2" Background="{x:Null}" BorderBrush="#FFF39421" Foreground="#FFF39421">
                                <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
                                    <materialDesign:PackIcon Kind="GestureTapButton" HorizontalAlignment="Center" VerticalAlignment="Center" Width="18" Height="18"/>
                                    <TextBlock Text="按钮控件" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                                </StackPanel>
                            </Button>

                            <CheckBox Content="复选框1" Grid.Row="2" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="#2196F3"/>
                            <CheckBox Content="复选框2" Grid.Row="2" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="#FFB821F3"/>
                            <CheckBox Content="复选框3" Grid.Row="2" Grid.Column="2" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="#FFF39421"/>

                            <RadioButton Content="单选框1" Grid.Row="3" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="#2196F3" Cursor=""/>
                            <RadioButton Content="单选框2" Grid.Row="3" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="#FFB821F3"/>
                            <RadioButton Content="单选框3" Grid.Row="3" Grid.Column="2" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="#FFF39421"/>

                            <ComboBox Grid.Row="4" Grid.Column="0" Margin="10,0,10,0" SelectedIndex="0" Foreground="Black" HorizontalContentAlignment="Center" >
                                <ComboBoxItem Content="下拉选项1"/>
                                <ComboBoxItem Content="下拉选项2"/>
                                <ComboBoxItem Content="下拉选项3"/>
                                <ComboBoxItem Content="下拉选项4"/>
                                <ComboBoxItem Content="下拉选项5"/>
                            </ComboBox>

                            <materialDesign:TimePicker Grid.Row="4" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Center" Width="120" SelectedTime="12:30:30" SelectedTimeFormat="Long" Cursor="" />
                       
                            <materialDesign:ColorPicker Grid.Row="8" Grid.ColumnSpan="3"/>
                            <materialDesign:RatingBar Grid.Row="4" Grid.Column="2" HorizontalAlignment="Center" VerticalAlignment="Center" Max="8" Value="5"/>
                            <materialDesign:Card Grid.Row="5" Background="#2196F3" Foreground="White">
                                <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="Card" />
                            </materialDesign:Card>
                            <materialDesign:Card Grid.Row="5" Grid.Column="1" Background="#FFB821F3" Foreground="White">
                                <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="Card" />
                            </materialDesign:Card>
                            <materialDesign:Card Grid.Row="5" Grid.Column="2" Background="#FFF39421" Foreground="White">
                                <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="Card" />
                            </materialDesign:Card>
                            <Slider Grid.Row="6" VerticalAlignment="Center" Maximum="100" Value="60"/>
                            <ProgressBar Grid.Row="6" Grid.Column="1" VerticalAlignment="Center" Maximum="100" Value="60" Height="12"/>
                            <PasswordBox Grid.Row="6" Grid.Column="2" Password="123456" VerticalAlignment="Center"  HorizontalContentAlignment="Center" />
                            <TextBox Grid.Row="7" Grid.Column="0" Text="文本框" VerticalAlignment="Center" HorizontalContentAlignment="Center"/>
                            <TextBox Grid.Row="7" Grid.Column="1" Text="文本框" VerticalAlignment="Center" HorizontalContentAlignment="Center" IsEnabled="False"/>
                            <TextBox Grid.Row="7" Grid.Column="3" Text="文本框" VerticalAlignment="Center" HorizontalContentAlignment="Center" MaxLength="36"/>
                        </Grid>
                    </TabItem>
                    <TabItem>
                        <TabItem.Header>
                            <StackPanel Orientation="Horizontal">
                                <materialDesign:PackIcon Kind="Tab"/>
                                <TextBlock Text="选项卡2"/>
                            </StackPanel>
                        </TabItem.Header>
                        <Grid>
                            <TextBlock Text="选项卡2" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                        </Grid>
                    </TabItem>
                </TabControl>

            </GroupBox>
            <GroupBox Grid.Column="1">
                <GroupBox.Header>
                    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center" >
                        <materialDesign:PackIcon Kind="Billboard" HorizontalAlignment="Center" VerticalAlignment="Center" Width="18" Height="18" Foreground="White"/>
                        <TextBlock Text="控件效果2" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White"/>
                    </StackPanel>
                </GroupBox.Header>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="460"/>
                        <RowDefinition Height="31*"/>
                    </Grid.RowDefinitions>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <Calendar Margin="0,0,0,0" Grid.RowSpan="1" VerticalAlignment="Center" HorizontalAlignment="Center"/>
                        <materialDesign:Clock Grid.Row="0" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" />
                        <Grid Grid.Column="1">
                            <Grid.RowDefinitions>
                                <RowDefinition Height="50"/>
                                <RowDefinition Height="50"/>
                                <RowDefinition Height="50"/>
                                <RowDefinition Height="50"/>
                                <RowDefinition Height="159*"/>
                            </Grid.RowDefinitions>

                        </Grid>
                            <!--<materialDesign:DialogHost Grid.Column="1" />-->
                    </Grid>

                    <DataGrid Grid.Row="1"  CanUserAddRows="True">
                        <DataGrid.Columns>
                            <materialDesign:DataGridTextColumn Header="编号"  Width="*"/>
                            <DataGridTextColumn Header="姓名" Width="*"/>
                            <materialDesign:DataGridComboBoxColumn Header="性别" Width="*"/>
                            <materialDesign:DataGridTextColumn Header="年龄"  Width="*"/>
                        </DataGrid.Columns>
                    </DataGrid>
                </Grid>

            </GroupBox>
        </Grid>
    </Grid>

4.在代码中添加事件定义代码

        private void ButtonPopUpLogout_Click(object sender, RoutedEventArgs e)
        {
            Application.Current.Shutdown();
        }

        private void ButtonOpenMenu_Click(object sender, RoutedEventArgs e)
        {
            ButtonOpenMenu.Visibility = Visibility.Collapsed;
            ButtonCloseMenu.Visibility = Visibility.Visible;
        }

        private void ButtonCloseMenu_Click(object sender, RoutedEventArgs e)
        {
            ButtonOpenMenu.Visibility = Visibility.Visible;
            ButtonCloseMenu.Visibility = Visibility.Collapsed;
        }

        private void GridTitle_MouseDown(object sender, MouseButtonEventArgs e)
        {
            if (e.ChangedButton == MouseButton.Left)
                DragMove();
        }

        private void GridMenu_SizeChanged(object sender, SizeChangedEventArgs e)
        {
            gdMian.Margin = new Thickness(e.NewSize.Width, 50, 0, 0);
        }

        private void ListViewItem_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {

        }

5.程序效果源码Demo下载地址:https://download.csdn.net/download/liyu3519/16620649

打开侧边栏菜单效果

 关闭侧边菜单栏效果

  • 1
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
WPF是一种用于创建富客户端应用程序的技术,它提供了丰富的控件和特效来增强应用程序的外观和交互性。其中,WPF的3D效果使得我们可以在应用程序中创建出令人惊叹的立体效果WPF的3D控件主要有Viewport3D和ModelVisual3D等。Viewport3D是一个呈现3D图形的区域,它允许我们在其中放置3D模型等内容。ModelVisual3D则是3D场景中的可视化对象,可以用来表示3D模型、灯光、相机等。 通过使用这些3D控件,我们可以在WPF应用程序中实现各种炫酷效果。例如,我们可以使用3D模型来创建一个旋转的立方体或球体,添加光照效果让其看起来更真实。我们还可以使用相机控制视角,让用户可以在3D场景中自由移动和查看。 另外,WPF提供了一些内置的3D效果,例如阴影、透明度、雾化等。通过调整这些效果参数,我们可以进一步改变3D场景的外观和感觉。 需要注意的是,WPF的3D效果相对于其他专门的3D引擎(如Unity、Unreal Engine等)来说功能较为有限。但在一般的桌面应用中,使用WPF的3D效果已经足够满足大部分需求,并且使用起来相对简单。 总的来说,WPF的3D效果为我们提供了一个强大的工具,可以在应用程序中实现各种炫酷的立体效果。无论是创建立体模型、添加光照效果还是调整视角,WPF都能满足我们的需求,并能让我们的应用程序更具吸引力和交互性。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值