WPF —— Expander折叠栏 、菜单标签 menu

Expander

1 :Expander折叠栏 简介

Expander控件有一个箭头按钮。单击箭头时,Expander中的子元素将显示或隐藏。箭头“展开”控件,使其子控件可见。

2 :Expander常用的属性

IsEnabled 默认是打开或者折叠起来,true就是展开 false折叠
ExpandDirection 展开的方向 down 向下展开

展开标签一般展开方向是上下,不设置高度
一般展开方向是左右,不设置宽度
VerticalAlignment= "top" HorizontalAlignment="Center" 展开宽随着内容进行自适应

3 关于Expander的实例

<Expander IsEnabled="True" ExpandDirection="Down" Width="200" 
   BorderThickness="2" BorderBrush="Green"
   VerticalAlignment="Top" HorizontalAlignment="Center">
    <Expander.Header>
        我的好友
    </Expander.Header>
    <StackPanel Orientation="Vertical">
        <CheckBox IsChecked="True" Margin="0,10">马云</CheckBox>
        <CheckBox Margin="0,10">马化腾</CheckBox>
        <CheckBox Margin="0,10">许家印</CheckBox>
    </StackPanel>
</Expander>

Menu

1:Menu菜单简介

Menu 表示一个 Windows 菜单控件,该控件可用于按层次组织与命令和事件处理程序关联的元素。

    该 Menu 控件提供一个项列表,用于指定应用程序的命令或选项。 通常,单击菜单上的项会打开子菜单或导致应用程序执行命令。

2 :Menu常用的属性

子菜单是: <MenuItem></MenuItem> ,子菜单标签又可以添加子菜单项
MenuItem.Icon 设置菜单图标的,
MenuItem.Header 和header属性都可以设置标题
MenuItem.Template 自定义子菜单

FlowDirection="RightToLeft" 菜单的排布方向
        LeftToRight 先排左边在拍右边

子菜单的事件:最常用的是通过click进行绑定点标题三击事件,通过界面命令进行绑定事件RoutedCommand
点击子菜单之后进行页面跳转,使用frame标签,navigate的方法进行跳转

3 关于Menu的实例

路由:一个菜单对应的是一个以页面 这种对应关系就是路由
    使用自定义RoutedUICommand(路由UI指令) 可以将一些预定义的操作绑定到应用程序的按钮或者菜单等控件上,
    这些命令可以直接触发相应的事件,例如click、例如 click,keydown事件等

<Window.Resources>
    <RoutedCommand x:Key="myCmd"></RoutedCommand>
</Window.Resources>

2 给"myCmd命令绑定什么样的操作
    Executed事件,当页面切换的时候,就是等同于点击了子菜单项,

<Window.CommandBindings Command="{StaticResource myCmd}"
                        Executed ="CommandBinging_Executed">
</Window.CommandBindings>

  <Menu Height="40" VerticalAlignment="Top">
      <MenuItem Header="出入管理" 
            FontFamily="华文行楷"
            FontSize="20" 
            BorderThickness="0,0,1,0"
                BorderBrush="Gray"
            Height="40"
                Command="{StaticResource myCmd}">

      </MenuItem>
      <MenuItem Header="请假管理" 
            FontFamily="华文行楷"
            FontSize="20" 
            Height="40">

      </MenuItem>
      <!--FlowDirection="RightToLeft" 菜单的排布方向
  LeftToRight 先排左边在拍右边
  -->
      <MenuItem Header="考勤管理" 
FontFamily="华文行楷"
FontSize="20" 
Height="40"
FlowDirection="LeftToRight">
          <!--设置图标-->
          <MenuItem.Icon>
              <Image Width="40"
             Height="40" 
             Source="https://img0.baidu.com/it/u=2374472521,3444438693">

              </Image>
          </MenuItem.Icon>

          <!--二级菜单-->
          <MenuItem Header="考勤打卡" FontFamily="宋体" Height="40" FontSize="20">
              <!--三级菜单-->
              <MenuItem>
                  <MenuItem.Header>
                      <TextBlock>2021班考勤打卡</TextBlock>
                  </MenuItem.Header>
              </MenuItem>

              <Separator></Separator>
              <MenuItem>
                  <MenuItem.Header>
                      <TextBlock>2022班考勤打卡</TextBlock>
                  </MenuItem.Header>
              </MenuItem>
          </MenuItem>
          <MenuItem Header="缺卡管理" FontFamily="宋体" Height="40" FontSize="20" Command="{StaticResource myCmd}">
              
          </MenuItem>
      </MenuItem>

自定义菜单项

        <MenuItem>
            <!--自定义菜单项的模板标签-->
            <MenuItem.Template>
                <!--ControlTemplate 控件模板TargetType作用到哪种类型标签上 -->
                <ControlTemplate TargetType="MenuItem">
                    <TextBlock Name="Text" 
                               Text="原子弹管理"
                               Padding="8"
                               FontSize="20"
                               FontFamily="华文行楷">
                        
                    </TextBlock>
                    <!--Triggers 触发 
                    Property="IsMouseOver" 鼠标是否放上去
                    Value="true" 放上去
                    -->
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver"
                                 Value="true">
                            <Setter TargetName="Text" Property="Background" Value="blue"></Setter>
                        </Trigger>

                    </ControlTemplate.Triggers>
                </ControlTemplate>
                
            </MenuItem.Template>
        </MenuItem>
    </Menu>
    <!--设置frame进行跳转
    NavigationUIVisibility="Hidden"因此自带前进和后退
    -->
    <Frame Name="f1" Margin="0,40,0,0" NavigationUIVisibility="Hidden"></Frame>
</Grid>

p1页面

  <Grid Background="Green">
      <TextBlock>我是page1</TextBlock>
  </Grid>

 

### 回答1: WPF(Windows Presentation Foundation)是微软的一个开发框架,用于创建Windows应用程序的用户界面。WPF提供了一种简单而强大的方式来创建可折叠的多级菜单。 在WPF中,我们可以使用TreeView控件来实现多级菜单折叠功能。TreeView控件是一个层次结构的控件,可以展示树状数据结构。 首先,我们需要创建TreeView控件并添加树节点。每个树节点可以包含子节点,形成多级层次结构。我们可以通过TreeView的ItemSource属性来设置树节点的数据源。 接下来,我们需要定义树节点的样式。WPF使用样式来定义控件的外观和行为。我们可以使用ToggleButton控件作为树节点的展开和折叠按钮,并使用触发器来设置不同状态下的样式。 当用户点击树节点的展开按钮时,我们可以通过绑定ToggleButton的IsChecked属性来控制子节点的可见性。根据IsChecked属性的值,我们可以使用触发器来设置子节点的显示或隐藏。 此外,我们还可以使用HierarchicalDataTemplate来定义树节点的数据模板。HierarchicalDataTemplate可以显示嵌套的子节点,并在子节点上递归使用相同的数据模板。 通过以上步骤,我们可以实现一个可以折叠的多级菜单。用户可以展开或折叠树节点,以显示或隐藏子级菜单。这种方式可以提供更好的用户体验,并且适用于大型菜单结构。 ### 回答2: WPF(Windows Presentation Foundation)是一种用于创建Windows桌面应用程序的框架。实现可以折叠的多级菜单WPF中很常见的功能。 要实现折叠的多级菜单,我们可以使用WPF的TreeView控件和HierarchicalDataTemplate数据模板。以下是实现的步骤: 1. 创建TreeView控件,并设置其ItemsSource属性为用于绑定菜单的数据源。数据源可以是一个集合,其中包含了菜单的层级结构。 2. 使用HierarchicalDataTemplate数据模板定义菜单项的外观和行为。数据模板中需要包含一个用于显示子菜单的ItemsControl控件(通常是TreeView或MenuItem)。 3. 在TreeView控件的ItemContainerStyle中设置一个触发器,用于在父菜单项被点击时展开或折叠其子菜单。可以使用ToggleButton控件作为触发器的视觉元素。 4. 在触发器的触发事件中,使用VisualStateManager来更改菜单子项的可见性。可以通过设置Visibility属性为Collapsed来折叠菜单,设置为Visible来展开子菜单。 通过以上步骤,我们可以实现一个具有可折叠的多级菜单WPF应用程序。当用户点击父菜单项时,它的子菜单会展开或折叠显示。这样可以提供一个更好的用户体验和导航结构,使得长列表的菜单可以更好地组织和管理。 ### 回答3: 在WPF中,实现可折叠的多级菜单可以使用TreeView控件结合TreeViewItem和HierarchicalDataTemplate来实现。 首先,在XAML文件中定义TreeView控件,并设置ItemTemplate为HierarchicalDataTemplate。HierarchicalDataTemplate用于表示TreeView的每个节点,其中可以包含子节点。通过设置HierarchicalDataTemplate的ItemsSource属性,可以指定该节点的子节点来实现多级菜单的展示。 然后在ViewModel中,创建一个ObservableCollection作为TreeView的数据源,并填充数据。每个节点应该拥有一个子节点集合,用于构建多级菜单。最外层的节点可以通过设置根节点的ItemsSource为子节点集合来展示多级菜单。 对于可折叠菜单的实现,可以通过将TreeViewItem的IsExpanded属性绑定到ViewModel中的一个布尔值上。当该值为true时,该节点展开;当该值为false时,该节点折叠。 另外,为了让菜单可点击,可以将TreeView控件的SelectedItem绑定到ViewModel中的一个属性上,并监听SelectedItem的变化,来处理菜单项被选中后的操作。 总结起来,实现可折叠的多级菜单,主要需要通过TreeView控件和HierarchicalDataTemplate实现多级菜单的展示,使用ObservableCollection作为数据源,设置IsExpanded属性来实现折叠和展开,以及通过绑定SelectedItem来处理菜单项的点击事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值