WPF SplitButton? [关闭](WPF SplitButton? [closed])

2019-07-17 18:43发布

我刚刚度过了一个非常令人沮丧的下午拖网谷歌寻找一个商业级WPF SplitButton控制,将在一个工作ToolBar 。 一个SplitButton是一个在那里你可以在主体部分单击Button采取默认动作,或者点击一个小三角形右侧获得其他操作的下拉菜单)。

我在网上找到了几个(包括在CodeProject上之一,包括两个CodePlex上)。 他们没有在一个适当的工作ToolBar --they要么不出现在所有的,或者他们没有工具栏按钮的造型。 我甚至看了一些商业产品,像ActiPro的弹出按钮(在他们SharedLibrary DLL)。 同样的问题。

是的,我已经看到了有关它的一切是多么容易创建一个职位。 这很容易地创建一个坏的,但不是那么容易创建一个看起来和工作方式类似于SplitButton S IN Outlook或Visual Studio中,在那里,如果你松开鼠标按钮的下拉菜单不消失。

有任何商业级:所以,这里是我的问题SplitButton出去了那里,无论是开源还是商业,在工具栏的工作? 我不是在寻找一个是$ 1,500年度订阅某人的控制库的一部分控制,但是如果有一个价格合理的SplitButton ,我确实希望找到它。

Answer 1:

唯一真正的“商业级”拆分按钮,我知道的是一个由Syncfusion ,其中包括他们的区控件的一部分(虽然它的工作原理条带的外部以及)。

话虽这么说,我记得这个实现的是相当实用和完整,如果你正在寻找一些免费的。



Answer 2:

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

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

  • 拆分按钮可以在工具栏中使用,并有适当的工具栏风格。 它也可以,如果你想重新设计。
  • 下拉菜单是通过自己的财产暴露 - 即splitbutton可以有它自己的上下文菜单的下拉一个(分开即使它似乎不合逻辑它可以在某些情况下非常有用 - 就像工具栏右键菜单弹出当你右键点击一个按钮放置在工具栏中)。
  • 下拉菜单文本菜单的标准 - 即内容可以数据绑定,菜单项重新设计等。
  • 两个拆分按钮的主要和下拉部分具有与它们相关联的命令的属性。


Answer 3:

我不知道究竟你正在寻找一个劈扣,该视频就如何创建一个相当完整,使得splitbutton是再好不过了。

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

我知道你不想一个教程,但我以前用过这个,你不能告诉它和前景的人之间的差异。



Answer 4:

没有为WPF和Silverlight在延迟的博客一个不错的拆分按钮实现:

香蕉SplitButton(用于SplitButton特定WPF修复和Silverlight的版本,一些代码分析改进,太)



Answer 5:

该扩展WPF工具包社区版 (这是免费的),有一个很好的SplitButton (它有一个DropDownButton以及)

<xctk:SplitButton Content="Click Me">
    <xctk:SplitButton.DropDownContent>
        <xctk:ColorCanvas />
    </xctk:SplitButton.DropDownContent>
 </xctk:SplitButton>


Answer 6:

我想你的意思是所谓的DropDownButton。 有可能解决你的问题上菜单项的布尔属性“StaysOpenOnClick”。



Answer 7:

我一直在寻找相同的,刚刚推出我自己的(你需要的风格,以自己的喜好(相匹配的工具栏),你可以重构它/它转换成一个自定义的控制...等)

<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>


Answer 8:

使用WPF工具包拆分按钮显示上下文菜单是相当直接的。 在你的窗口资源添加上下文菜单。 在窗口负载 - 结合上下文菜单拆分按钮,然后使用右键菜单,你通常会做。

这真的需要在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;
        }
    }
}


文章来源: WPF SplitButton? [closed]