WPF MaterialDesign 初学项目实战(6):设计首页(2),设置样式触发器。已完结

原项目视频

WPF项目实战合集(2022终结版) 26P

源码地址

WPF项目源码

其他内容

WPF MaterialDesign 初学项目实战(0):github 项目Demo运行
WPF MaterialDesign 初学项目实战(1)首页搭建
WPF MaterialDesign 初学项目实战(2)首页导航栏样式
WPF MaterialDesign 初学项目实战(3)动态侧边栏
WPF MaterialDesign 初学项目实战(4)侧边栏路由管理
WPF MaterialDesign 初学项目实战(5):设计首页

环境搭建:

我想到WPF的环境搭建比较复杂,我之后的博客会把所有的环境写下来。

NuGet

在这里插入图片描述

命名空间:

//materialDesign,prism材质包
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
//点击反馈
xmlns:behaviors="http://schemas.microsoft.com/xaml/behaviors"
//引入prism
xmlns:prism="http://prismlibrary.com/"


//materialDesign 资源样式
TextElement.Foreground="{DynamicResource MaterialDesignBody}"
TextElement.FontWeight="Regular"
TextElement.FontSize="13"
TextOptions.TextFormattingMode="Ideal"
TextOptions.TextRenderingMode="Auto"
Background="{DynamicResource MaterialDesignPaper}"
FontFamily="{DynamicResource MaterialDesignFont}"

本期目标

新建列表

动态生成列表,其实都是老一套方法了。

引用
声明List<实体>
数据对象绑定
Binding对应属性
C#新建实体类
ViewModels
View
DateTemplate
最终页面显示

看一下布局
在这里插入图片描述
在这里插入图片描述
解析一下页面布局

  • Gird(灰):分成左右两个
    • DockPanel(红):显示标题和按钮
    • ListBox(蓝):显示信息列表

然后就是类的继承关系:

Item基类
待办事项Item
备忘事项Item

代码:

  public class ItemBase
    {
        public int Id { get; set; }

        public DateTime CreateDate { get; set; }

        public DateTime UpdateTime { get; set; }

        
    }
    public class ToDoItem : ItemBase
    {

        public string? Title { get; set; }

        public string? Content { get; set; }

        public int Status { get; set; }


    }
    public class MemoItem :ItemBase
    {
        public string? Title { get; set; }

        public string? Content { get; set; }

        public int status { get; set; }
    }

声明变量


    public class IndexViewModel : BindableBase
    {
        public IndexViewModel()
        {
  			.......
            ToDoItems = new ObservableCollection<ToDoItem> ();
            MemoItems = new ObservableCollection<MemoItem> ();
            
            
            Create_ToDo_Test();

        }
		.......

        private ObservableCollection<ToDoItem> toDoItems;
        public ObservableCollection<ToDoItem> ToDoItems
        {
            get { return toDoItems; }
            set { toDoItems = value; RaisePropertyChanged(); }
        }

        private ObservableCollection<MemoItem> memoItems;

        public ObservableCollection<MemoItem> MemoItems
        {
            get { return memoItems; }
            set { memoItems = value; RaisePropertyChanged(); }
        }


        void Create_ToDo_Test()
        {
            for(int i = 0; i < 10; i++)
            {
                ToDoItems.Add(new ToDoItem() { Title = "todo标题"+i, Content = "todoContent" });
                MemoItems.Add(new MemoItem() { Title = "Memo标题"+i , Content = "MemoContent"});
            }

        }
    }

在ViewIndex里面引用

<Grid Grid.Row="2">
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>

            <Border Margin="10"
                    CornerRadius="4"
                    Opacity="0.1"
                    Background="#BEBEBE" />

            <StackPanel Margin="15">
                <DockPanel LastChildFill="False">
                    <TextBlock Text="代办事项"
                               FontSize='30'
                               FontWeight="Bold" />

                    <Button DockPanel.Dock="Right"
                            VerticalAlignment="Top"
                            Margin="0,0,10,0"
                            Width="35"
                            Height="35"
                            Style="{StaticResource MaterialDesignFloatingActionAccentButton}">
                        <materialDesign:PackIcon Kind="Add" />
                    </Button>
                </DockPanel>
                <ListBox  ItemsSource="{Binding ToDoItems}"  Height="380"
                          Cursor="" ScrollViewer.VerticalScrollBarVisibility="Disabled">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Cursor="Hand">
                                <TextBlock Text="{Binding Title}" FontSize="18" />
                                <TextBlock Text="{Binding Content}" Opacity="0.5" Margin="5,5,0,0"/>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </StackPanel>


            <Border Margin="10"
                    CornerRadius="4"
                    Opacity="0.1"
                    Grid.Column="1"
                    Background="#BEBEBE" />

            <StackPanel Margin="15"
                        Grid.Column="1">
                <DockPanel LastChildFill="False">
                    <TextBlock Text="备忘录"
                               FontSize='30'
                               FontWeight="Bold" />

                    <Button DockPanel.Dock="Right"
                            VerticalAlignment="Top"
                            Margin="0,0,10,0"
                            Width="35"
                            Height="35"
                            Style="{StaticResource MaterialDesignFloatingActionAccentButton}">
                        <materialDesign:PackIcon Kind="Add" />
                    </Button>


                </DockPanel>
                <ListBox  ItemsSource="{Binding MemoItems}"
                          Height="380"
                          Cursor=""
                          ScrollViewer.VerticalScrollBarVisibility="Disabled"
                          >
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <TextBlock Text="{Binding Title}"
                                           FontSize="18" />
                                <TextBlock Text="{Binding Content}"
                                           Opacity="0.5"
                                           Margin="5,5,0,0" />
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </StackPanel>
        </Grid>

实现效果:

在这里插入图片描述
数据绑定使用频率较高,之后不再详细描述代码。毕竟做笔记的目的不是把全部都记下来,是把不会的记下来。

如何设置触发器

触发器的设置顺序

  • TargetType:触发源,例如border
    • Tiggers
      • Tigger Property+value:触发事件,例如border边框鼠标滑动事件
        • Setter :触发结果
          • Setter.value:有些触发结果要搭配Setter设定返回值

示例代码,鼠标滑动边框发光

<!--声明触发器对象-->
        <Style TargetType="Border">
            <!--声明触发器-->
            <Style.Triggers>
                <Trigger Property="IsMouseOver"
                         Value="True">
                    <Setter Property="Effect">
                        <Setter.Value>
                            <DropShadowEffect Color="#DDDDDD"
                                              ShadowDepth="2"
                                              BlurRadius="10" />
                        </Setter.Value>
                    </Setter>
                </Trigger>
            </Style.Triggers>
        </Style>

实现效果:

在这里插入图片描述

结尾

我现在基础掌握的差不多了,之后的项目代码只挑选难点进行描述,简单重复的地方我就跳过了。如果想要源码的可以去B站视频上面去找源码。

后来我想了一下,笔记重要的是笔记,而不是重复的工作。这个项目实战的笔记到此为止了。后面只会更新WPF的具体难点的解决。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值