首页 > 其他分享 >WPF —— Menu数据绑定实例

WPF —— Menu数据绑定实例

时间:2024-03-26 19:29:05浏览次数:20  
标签:菜单 name Menu 绑定 list 子集 MenuInfo new WPF

{Binding} 因为我们操作这个集合对象,而不是集中某个对象,所以直接写{Binding}就行
            如果绑定是list集合的某个对象属性时候,需要{bindingvpath = 属性名}

<Menu x:Name="m1" ItemsSource="{Binding}">
    
</Menu>

树形数据模板 : 分层数据模板,主要是用于MenuItem和TreeViewItem控件上
                DATaType属性,指定控件中使用的模型类
                ItemsSource 树形控件使用的的数据源,下一层的数据源
                树形标签的内容区域对象的属性

1.1 定义模型类,一个属性是菜单标题属性,另外一个属性是保存子菜单对象集合
 *  定义构造函数,在构造函数进行判断如果有父级的菜单,把当前对象添加到父级菜单list属性里面,

树型模型的定义 menu的标题定义
    // 整个对象需要放进一个list集合中里面SubMenus属性保存的子集的菜单

public class MenuInfo
{
    // 一级菜单标题使用字符串进行
    public string MenuName { get; set; } // 存储的是首页娱乐 军事 等一级标题
    
    // 子集菜单标题
    public List<MenuInfo> SubMenus { get; set; }

    public MenuInfo(string m1,MenuInfo?parMenu)
    {
        MenuName = m1;
        if (parMenu != null)
        {
            // 不等于空的前提是 new MenuInfo("首页",MenuInfo)
            // 如果new MenuInfo("首页",MenuInfo) 证明没有子集菜单
            // 如果他的父级菜单是否有子集菜单,如果有直接加进去 如果没有新建一个空的集合
            List<MenuInfo> list = parMenu.SubMenus ?? new List<MenuInfo>();
            list.Add(this);
            parMenu.SubMenus = list;
        }
    }

}


1.2 给Menu标签绑定list集合  注意创建对象时候 第二参数传递是父级菜单对象
 

首页的数据源 不要求有子集菜单
            MenuInfo houmCaiDan = new MenuInfo("首页", null);

            //军事的一级菜单
            MenuInfo junshiCaiDan = new MenuInfo("军事",null);
            //军事的二级菜单
            MenuInfo junshiCaiDan_1 = new MenuInfo("军事1", junshiCaiDan);
           
            zongList.Add(houmCaiDan);
            zongList.Add(junshiCaiDan);

 1.3 找到menu设置dataContext

 this.m1.DataContext = zongList;


 1.4 添加HierarchicalDataTemplate模版 ,绑定数据是总的list的某个对象下的Submens子菜单集合,(绑定的是子集菜单对象集合)

<HierarchicalDataTemplate DataType="{x:Type et:MenuInfo}"
    ItemsSource="{Binding Path=SubMenus}">
    <TextBlock Text="{Binding Path=MenuName}" MouseDown="f1"></TextBlock>
</HierarchicalDataTemplate>

1.5 添加textblock 绑定子集菜单标题

private void f1(object sender, MouseButtonEventArgs e)
{
    // MessageBox.Show(((TextBlock)sender).Text.ToString());
    string name = ((TextBlock)sender).Text.ToString();
    if (name == "首页")
    {
        this.f2.Navigate(new Home());
    }
    else if (name == "娱乐")
    {
        this.f2.Navigate(new YuLe());
    }
    else if (name == "军事1")
    {
        MessageBox.Show(name);
    }
    else if (name == "俄罗斯恐怖袭击事件")
    {
        this.f2.Navigate(new ELuosi());
    }

}

标签:菜单,name,Menu,绑定,list,子集,MenuInfo,new,WPF
From: https://blog.csdn.net/lu2023_8_6/article/details/137054930

相关文章

  • 关于WPF进度条的使用
    本文讲述如何在软件启动和窗体按钮操作时弹出进度条。运行环境:Win10、VS2022一、新建WPF项目。 二、新建WPF窗体。1、新建窗体,取名DefProcessBar.xaml。 2、设置窗体属性、样式。<Windowx:Class="WpfApp4.DefProcessBar"xmlns="http://schemas.microsoft.c......
  • WPF C# create canvas and draw ellipse in canvas
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows.Documents;usingSystem.Windows.Input;......
  • Ex-menu
    --coding:utf-8--Author:Tinkymenu={'浙江':{'杭州':{'余杭区':{'仓前街道':{},'五常街道':{},'闲林街道':{},},'滨江区':{'长河街道':{},'浦沿街道':{},'西兴街道':{},},&#......
  • 界面控件DevExpress WinForms/WPF v23.2 - 电子表格支持表单控件
    DevExpressWinForm拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForm能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!表单控件表示交互元素(按钮、复选框和下拉列表),并在......
  • WPF绑定之道:为何选择属性而非字段,提升灵活性与可控性
     概述:WPF支持绑定到对象的属性而不是字段,主要因为属性提供了更多控制和扩展性。属性包含get和set方法,支持数据验证和通知属性更改,而字段通常被认为是内部实现。使用属性使WPF能够更灵活、可控地与数据交互,提高代码的可读性和可维护性。WPF(WindowsPresentationFoundation)支......
  • C# WPF自定义消息弹窗
    我用的是CaliburnMicro框架,自建框架或者使用其它框架的可自行替换绑定部分即可。效果图: 消息窗体View代码:<Windowx:Class="WpfAppTest.Views.MsgBoxView"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.mi......
  • WPF的所有绑定
    一、静态绑定1、新建一个资源字典ButtonStyle<Stylex:Key="btn"TargetType="Button"><SetterProperty="Width"Value="200"/><SetterProperty="Height"Value="30"/><SetterPro......
  • 【WPF应用13】WPF基本控件-DockPanel布局详解与示例
    引言WPF(WindowsPresentationFoundation)是微软.NET框架的一个组成部分,它用于构建桌面应用程序的用户界面。在WPF中,控件是构建用户界面的基本元素,而布局控件则负责安排其他控件的位置和大小。DockPanel是WPF中的一个布局控件,它允许您将子控件沿着边缘排列,类似于......
  • 【WPF应用12】基本控件-WrapPanel布局详解与示例
    在WindowsPresentationFoundation(WPF)中,WrapPanel是一个强大的布局控件,它允许子控件在空间不足时自动换行,提供了极大的灵活性。在本文中,我们将详细介绍WrapPanel的布局原理、使用方法以及在开发中的应用示例。1.WrapPanel控件的布局原理WrapPanel是WPF中的一种面板......
  • UE4 创建角色 绑定动画 蒙太奇动画
    UE4文档:https://docs.unrealengine.com/4.27/zh-CN/AnimatingObjects/SkeletalMeshAnimation/CharacterSetupOverview/角色-动画蓝图动画蓝图中包含多种动画创建角色输入【这里设置使用OrientRotationtoMovement后,没用,发现是需要设置摇臂中的UsePawnControlRotati......