我刚刚度过了一个非常令人沮丧的下午拖网谷歌寻找一个商业级WPF SplitButton
控制,将在一个工作ToolBar
。 一个SplitButton
是一个在那里你可以在主体部分单击Button
采取默认动作,或者点击一个小三角形右侧获得其他操作的下拉菜单)。
我在网上找到了几个(包括在CodeProject上之一,包括两个CodePlex上)。 他们没有在一个适当的工作ToolBar
--they要么不出现在所有的,或者他们没有工具栏按钮的造型。 我甚至看了一些商业产品,像ActiPro的弹出按钮(在他们SharedLibrary DLL)。 同样的问题。
是的,我已经看到了有关它的一切是多么容易创建一个职位。 这很容易地创建一个坏的,但不是那么容易创建一个看起来和工作方式类似于SplitButton
S IN Outlook或Visual Studio中,在那里,如果你松开鼠标按钮的下拉菜单不消失。
有任何商业级:所以,这里是我的问题SplitButton
出去了那里,无论是开源还是商业,在工具栏的工作? 我不是在寻找一个是$ 1,500年度订阅某人的控制库的一部分控制,但是如果有一个价格合理的SplitButton
,我确实希望找到它。
唯一真正的“商业级”拆分按钮,我知道的是一个由Syncfusion ,其中包括他们的区控件的一部分(虽然它的工作原理条带的外部以及)。
话虽这么说,我记得这个实现的是相当实用和完整,如果你正在寻找一些免费的。
另一个很好的免费实现,似乎拥有了一切:
http://huydinhpham.blogspot.com/2008/09/wpf-drop-down-and-split-button.html
- 拆分按钮可以在工具栏中使用,并有适当的工具栏风格。 它也可以,如果你想重新设计。
- 下拉菜单是通过自己的财产暴露 - 即splitbutton可以有它自己的上下文菜单的下拉一个(分开即使它似乎不合逻辑它可以在某些情况下非常有用 - 就像工具栏右键菜单弹出当你右键点击一个按钮放置在工具栏中)。
- 下拉菜单文本菜单的标准 - 即内容可以数据绑定,菜单项重新设计等。
- 两个拆分按钮的主要和下拉部分具有与它们相关联的命令的属性。
我不知道究竟你正在寻找一个劈扣,该视频就如何创建一个相当完整,使得splitbutton是再好不过了。
http://windowsclient.net/learn/video.aspx?v=3929
我知道你不想一个教程,但我以前用过这个,你不能告诉它和前景的人之间的差异。
没有为WPF和Silverlight在延迟的博客一个不错的拆分按钮实现:
香蕉SplitButton(用于SplitButton特定WPF修复和Silverlight的版本,一些代码分析改进,太)
该扩展WPF工具包社区版 (这是免费的),有一个很好的SplitButton
(它有一个DropDownButton
以及)
<xctk:SplitButton Content="Click Me">
<xctk:SplitButton.DropDownContent>
<xctk:ColorCanvas />
</xctk:SplitButton.DropDownContent>
</xctk:SplitButton>
我想你的意思是所谓的DropDownButton。 有可能解决你的问题上菜单项的布尔属性“StaysOpenOnClick”。
我一直在寻找相同的,刚刚推出我自己的(你需要的风格,以自己的喜好(相匹配的工具栏),你可以重构它/它转换成一个自定义的控制...等)
<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>
使用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;
}
}
}