首页 > 其他分享 >【WPF】ToolBar工具栏菜单和命令

【WPF】ToolBar工具栏菜单和命令

时间:2022-10-27 23:44:21浏览次数:72  
标签:控件 菜单 工具栏 ToolBar ToolBarTray WPF 溢出

 ToolBar

    对许多小的按钮(或者其他控件)进行分组。
    ToolBar 可以被放在元素树的任何地方,但是通常把它们放在一个叫作ToolBarTray 的FrameworkElement 中。
    用户就可以拖曳ToolBar 或重新定义ToolBar,。除非ToolBarTray的IsLocked 属性被设置为true。
    ToolBarTray 有一个Orientation 属性,可以把它设置为Vertical 使其所有的ToolBar 垂直排列项。
    默认都是最后一个元素第一个被移到溢出区域,但是你能通过OverflowMode 附加属性来控制每个项的溢出行为。有了这个属性,你就可以把一个项标记为AsNeeded(默认,按需要溢出)、Always 或Never。
    System.Windows.Input 命名空间中的KeyboardNavigat ion 类定义了一些用来自定义键盘行为的附加属性。
    ToolBar 实际上是一个带有头的Item 控件(就像MenuItem 和TreeViewItem)。它的Header 属性从来不会被显示,但是它可以被用来实现ToolBarTray 的其他特性。

ToolBarTray

 ToolBarTray是ToolBar的容器,ToolBar可以放在任何地方,通常放在ToolBarTray中。ToolBarTray 将处理诸如放置和调整大小之类的事情,并且您可以在 ToolBarTray 元素内拥有多个 ToolBar 控件。

<Window x:Class="WpfTutorialSamples.Common_interface_controls.ToolbarSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="ToolbarSample" Height="200" Width="300">
    <Window.CommandBindings>
        <CommandBinding Command="New" CanExecute="CommonCommandBinding_CanExecute" />
        <CommandBinding Command="Open" CanExecute="CommonCommandBinding_CanExecute" />
        <CommandBinding Command="Save" CanExecute="CommonCommandBinding_CanExecute" />
    </Window.CommandBindings>
    <DockPanel>
        <ToolBarTray DockPanel.Dock="Top">
            <ToolBar>
                <Button Command="New" Content="New" />
                <Button Command="Open" Content="Open" />
                <Button Command="Save" Content="Save" />
            </ToolBar>
            <ToolBar>
                <Button Command="Cut" Content="Cut" />
                <Button Command="Copy" Content="Copy" />
                <Button Command="Paste" Content="Paste" />
            </ToolBar>
        </ToolBarTray>
        <TextBox AcceptsReturn="True" />
    </DockPanel>
</Window>

效果

 

 

 

图标

虽然工具栏按钮上的文本完全可以,但通常的方法是使用图标或至少是图标和一段文本的组合。由于 WPF 使用常规 Button 控件,因此向工具栏项添加图标非常容易。看看下一个例子,我们都做:

<Window x:Class="WpfTutorialSamples.Common_interface_controls.ToolbarIconSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="ToolbarIconSample" Height="200" Width="300">
    <DockPanel>
        <ToolBarTray DockPanel.Dock="Top">
            <ToolBar>
                <Button Command="Cut" ToolTip="Cut selection to Windows Clipboard.">
                    <Image Source="/WpfTutorialSamples;component/Images/cut.png" />
                </Button>
                <Button Command="Copy" ToolTip="Copy selection to Windows Clipboard.">
                    <Image Source="/WpfTutorialSamples;component/Images/copy.png" />
                </Button>
                <Button Command="Paste" ToolTip="Paste from Windows Clipboard.">
                    <StackPanel Orientation="Horizontal">
                        <Image Source="/WpfTutorialSamples;component/Images/paste.png" />
                        <TextBlock Margin="3,0,0,0">Paste</TextBlock>
                    </StackPanel>
                </Button>
            </ToolBar>
        </ToolBarTray>
        <TextBox AcceptsReturn="True" />
    </DockPanel>
</Window>

效果

 

 

 溢出

正如已经提到的,使用 ToolBar 控件而不仅仅是按钮面板的一个很好的理由是自动溢出处理。这意味着如果不再有足够的空间来显示工具栏上的所有按钮,WPF 会将它们放在一个菜单中,该菜单可通过单击工具栏右侧的箭头来访问。您可以在此屏幕截图上看到它是如何工作的,它显示了第一个示例,但窗口较小,从而为工具栏留下了较少的空间:

WPF 甚至允许您决定哪些项目适合溢出隐藏,哪些应该始终可见。通常,在设计工具栏时,有些项目不如其他项目重要,而有些项目您甚至可能希望一直显示在溢出菜单中,无论空间是否足够。

这是附加属性ToolBar.OverflowMode发挥作用的地方。默认值是 AsNeeded,这只是意味着如果没有足够的空间,则将工具栏项放入溢出菜单中。您可以使用AlwaysNever来代替,这正是名称所暗示的:始终将项目放在溢出菜单中或防止该项目被移动到溢出菜单。以下是有关如何分配

<ToolBar>
    <Button Command="Cut" Content="Cut" ToolBar.OverflowMode="Always" />
    <Button Command="Copy" Content="Copy" ToolBar.OverflowMode="AsNeeded" />
    <Button Command="Paste" Content="Paste" ToolBar.OverflowMode="Never" />
</ToolBar>

垂直

    <ToolBarTray  Orientation="Vertical">
            <ToolBar IsOverflowOpen="True"  Band="1" BandIndex="1" Background="SaddleBrown">

                <RadioButton  Cursor="Hand"  
                          Padding="8"
                          Foreground="Wheat" 
                          Style="{DynamicResource RadioButtonStyle}"  
                          Height="60"  
                          IsThreeState="False">

                    <Path Stretch="Uniform"    Fill="Aqua" Data="{StaticResource deleteIco}"/>
                </RadioButton>


                <RadioButton Padding="8"  
                         Cursor="Hand" 
                         Foreground="Wheat" 
                         Style="{DynamicResource RadioButtonStyle}"   
                         Height="60"  
                         IsChecked="{Binding IsAddSquare, Mode=TwoWay}"
                         IsThreeState="False">
                    <Path Stretch="Uniform"    Fill="Aqua" Data="{StaticResource  addIco}"/>
                </RadioButton>

                <RadioButton Padding="8" 
                         Foreground="Wheat" 
                         Cursor="Hand"
                         Style="{DynamicResource RadioButtonStyle}"
                         Height="60" 
                         IsThreeState="False">
                    <Path Stretch="Uniform"    Fill="Aqua" Data="{StaticResource  SelectOrMoveIco}"/>
                </RadioButton>




            </ToolBar>
        </ToolBarTray>

效果

 

 

ToolBar分隔符

<Window x:Class="菜单.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:菜单"
        mc:Ignorable="d"
        Title="MainWindow" Height="200" Width="300">
    <Window.CommandBindings>
        <CommandBinding Command="New" CanExecute="CommonCommandBinding_CanExecute" />
        <CommandBinding Command="Open" CanExecute="CommonCommandBinding_CanExecute" />
        <CommandBinding Command="Save" CanExecute="CommonCommandBinding_CanExecute" />
    </Window.CommandBindings>
    <DockPanel>
        <ToolBarTray DockPanel.Dock="Top">
            <ToolBar>
                <Button Command="New" Content="New" />
                <Button Command="Open" Content="Open" />
                <Button Command="Save" Content="Save" />
                <Separator />
                <Label>Font size:</Label>
            </ToolBar>
            
            <ToolBar>
                <ComboBox>
                    <ComboBoxItem>10</ComboBoxItem>
                    <ComboBoxItem IsSelected="True">12</ComboBoxItem>
                    <ComboBoxItem>14</ComboBoxItem>
                    <ComboBoxItem>16</ComboBoxItem>
                </ComboBox>
            </ToolBar>
        </ToolBarTray>
        <TextBox AcceptsReturn="True" />
    </DockPanel>
      
</Window>

以上示例还在toolbar中放了分隔符,lable以及combobox控件
在这里插入图片描述

标签:控件,菜单,工具栏,ToolBar,ToolBarTray,WPF,溢出
From: https://www.cnblogs.com/cdaniu/p/16834374.html

相关文章

  • WPF常用图表软件
    暂时没太多时间就不截图了,简述一下livechart1这个chart一直没有开发到成熟,所以bug有点多,时间轴就有问题,然后免费版性能还是很差的,得用收费版的那个补丁,然后就会性能很......
  • ArcEngine+WPF开发踩过的坑
    最近开始弄WPF下的arcengine开发,说实话,很多坑,每次遇到的奇葩问题会在这个随笔下记录:1、地图不刷新 问题:调用ActiveView.PartialRefresh()后地图不刷新???解决方案......
  • WPF-后台动态创建窗口添加控件示例
    Windowwindow1=newWindow();window1.Title="新窗口";window1.Background=Brushes.LightBlue;//SolidColorBrushbrush1......
  • layui 设置表格高度自适应后,工具栏设置fixed后高度,不一致问题
    js部分:,done:function(res,curr,count){//该方法用于解决,使用fixed固定列后,行高和其他列不一致的问题......
  • wpf引用样式
    在css中,可以把公用样式抽出放在一个单独的css文件里面。在wpf中也可以做到类似的操作。分离样式把样式写在Style下的Button.xaml下:<ResourceDictionaryxmlns="http:/......
  • WPF绑定ViewModel方式
    一、xaml方式绑定ViewModel在MainWindow.xaml文件中,引入ViewModel对应的命名空间在MainWindow.xaml文件中,添加窗口上下文节点绑定ViewModel,如下图:二、代码方式绑定Vi......
  • 没啥用的知识 在WPF使用MediaElement,但Source带https会抛出未引用对象实列
    原因和解决办法如果恰好使用了MediaElement,在调用的时候,会出现空异常varuri=newUri("https://xxxx.mp4",UriKind.RelativeOrAbsolute);mediaElement.Source=uri......
  • [WPF] 抄抄超强的苹果官网滚动文字特效实现
    1.前言今天ChokCoco大佬发布了一篇博客超强的苹果官网滚动文字特效实现,iPhone我是买不起的,但不妨碍我对抄特效感兴趣,正好我这周安排的工作已经完成了,于是有空练练手......
  • 【WPF】EF下CodeFirst、DBFirst与ModelFirst分析
    通过项目,我们了解到EF框架有三种数据持久化的方式,也就是标题中我所提到的三种。那么这些方式之间又有什么联系和区别呢?   篇幅原因,本篇博客不再分别介绍每种方法如何实......
  • 【WPF】EFCore 6.0生成SQLite实体对象
    EFCore-DBFirst方式生成SQLite实体对象环境vs2022+.net6.0+控制台+sqlite3,控制台可以生存实体;但是在Wpf中无法生存实体(不知道具体原因)。DBFirst采用FluentAPI来......