21

我刚刚度过了一个非常令人沮丧的下午,在 Google 上寻找可以SplitButtonToolBar. ASplitButton是您可以单击的主要部分Button以执行默认操作,或单击右侧的小三角形以获取备用操作的下拉菜单)。

我在网上找到了几个(包括 CodeProject 上的一个,以及 CodePlex 上的两个)。它们都不能正常工作——它们ToolBar要么根本不出现,要么没有工具栏按钮样式。我什至查看了一些商业产品,例如 ActiPro 的弹出按钮(在他们的 SharedLibrary DLL 中)。同样的问题。

是的,我看过所有关于创建一个多么容易的帖子。创建一个坏的很容易,但创建一个看起来和工作起来像SplitButtonOutlook 或 Visual Studio 中的 s 的文件并不容易,如果您释放鼠标按钮,下拉菜单不会消失。

所以,这是我的问题:是否有任何商业级SplitButton的 s,无论是开源的还是商业的,都可以在工具栏中使用?我不是在寻找一个作为每年 1,500 美元订阅某人控件库的一部分的控件,但如果有一个价格合理的控件SplitButton,我肯定会找到它。

4

8 回答 8

7

我所知道的唯一真正的“商业级”拆分按钮是Syncfusion的那个,它包含在他们的功能区控件中(尽管它也可以在功能区之外工作)。

话虽如此,如果您正在寻找免费的东西,我记得这个实现是相当可用和完整的。

于 2009-09-11T22:25:27.597 回答
6

另一个很好的免费实现似乎拥有一切:

http://huydinhpham.blogspot.com/2008/09/wpf-drop-down-and-split-button.html

  • 拆分按钮可以在工具栏中使用,并具有适当的工具栏样式。如果你愿意,它也可以重新设计。
  • 下拉菜单通过其自己的属性公开 - 即 splitbutton 可以将其自己的上下文菜单与下拉菜单分开(即使它看起来不合逻辑它在某些情况下可能很有用 - 例如当您右键单击按钮时弹出的工具栏上下文菜单放置在工具栏中)。
  • 下拉菜单是标准的 ContextMenu - 即内容可以是数据绑定的,菜单项可以重新设置样式等。
  • 拆分按钮的主要部分和下拉部分都有与之关联的命令属性。
于 2010-01-21T11:32:59.750 回答
4

扩展的WPF 工具包社区版(免费)有一个不错的SplitButton(它也有一个DropDownButton

拆分按钮屏幕截图

<xctk:SplitButton Content="Click Me">
    <xctk:SplitButton.DropDownContent>
        <xctk:ColorCanvas />
    </xctk:SplitButton.DropDownContent>
 </xctk:SplitButton>
于 2013-10-08T13:03:19.677 回答
3

我不知道您在拆分按钮中究竟在寻找什么,但是这个关于如何创建拆分按钮的视频非常完整,并且制作了一个几乎完美的拆分按钮。

http://windowsclient.net/learn/video.aspx?v=3929

我知道你不想要教程,但我以前用过这个,你无法分辨它和 Outlook 中的区别。

于 2009-09-11T22:48:45.457 回答
3

对于 WPF 和 Silverlight,Delay 的博客有一个非常好的拆分按钮实现:

Banana SplitButton(SplitButton 的 WPF 特定修复和 Silverlight 版本的一些代码分析改进)

于 2010-11-27T13:18:55.000 回答
1

我认为您的意思是称为 DropDownButton。MenuItem“StaysOpenOnClick”上有一个布尔属性可以解决您的问题。

于 2009-09-12T00:19:10.730 回答
1

我一直在寻找相同的东西,只是推出了我自己的(您需要根据自己的喜好设置样式(以匹配工具栏),您可以重构它/将其转换为自定义控件......等等)

<StackPanel x:Name="Split" Orientation="Horizontal">
    <Button Command="{Binding MainCommand}">
        <StackPanel>
            <Image Source="{StaticResource MainCommandImage}"/>
            <TextBlock>MainCommand</TextBlock>
        </StackPanel>
    </Button>
    <Separator HorizontalAlignment="Left" Width="1" VerticalAlignment="Stretch" Margin="0,5"/>
    <CheckBox Width="16" IsThreeState="False">
        <Grid>
            <Path Fill="Black" Data="{StaticResource DownArrowGeometry}"
                  Stretch="Uniform" Height="6" Width="6" HorizontalAlignment="Center" VerticalAlignment="Center"/>
            <Popup x:Name="popupOptions" AllowsTransparency="True" PopupAnimation="Fade" StaysOpen="False" 
                   Placement="Bottom" PlacementTarget="{Binding ElementName=Split}" HorizontalOffset="-3"
                   IsOpen="{Binding RelativeSource={RelativeSource AncestorType={x:Type CheckBox}, AncestorLevel=1}, Path=IsChecked}">
                <StackPanel>
                    <StackPanel>
                        <Image Source="{StaticResource SubCommandImage1}"/>
                        <TextBlock>SubCommand1</TextBlock>
                     </StackPanel>
                    <StackPanel>
                        <Image Source="{StaticResource SubCommandImage2}"/>
                        <TextBlock>SubCommand2</TextBlock>
                     </StackPanel>
                </StackPanel>
            </Popup>
        </Grid>
    </CheckBox>
</StackPanel>
于 2015-08-28T14:19:10.260 回答
1

使用 WPF Toolkit 拆分按钮显示上下文菜单相当简单。在窗口资源中添加上下文菜单。在窗口加载时 - 将上下文菜单绑定到拆分按钮,然后像往常一样使用上下文菜单。

它确实需要添加到 WPF 工具包中,因为此按钮的大多数用例是复制旧的 WinForm Splitt 按钮。

在此处输入图像描述

<Window x:Class="SplitButtonTesting.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:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <ContextMenu x:Key="contextMenu" IsOpen="{Binding IsOpen}">
        <MenuItem Header="One" />
        <MenuItem Header="Two" />
        <MenuItem Header="More...">
            <MenuItem Header="One" />
            <MenuItem Header="Two" />
        </MenuItem>
    </ContextMenu>
</Window.Resources>
<DockPanel>

    <Menu DockPanel.Dock="Top" x:Name="ApplicationMenu">

        <xctk:SplitButton x:Name="SplitButton" Content="Main Button" DropDownContent="{x:Null}" />

    </Menu>
    <Border />

</DockPanel>

后面的代码:

using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;

namespace SplitButtonTesting
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            SetupSplitButton();
        }

        public void SetupSplitButton()
       {
           var menu = this.Resources["contextMenu"] as ContextMenu;

           menu.PlacementTarget = SplitButton;

            menu.Placement = PlacementMode.Bottom;
            menu.DataContext = SplitButton;
        }
    }
}
于 2017-11-24T10:25:52.080 回答