我刚刚度过了一个非常令人沮丧的下午,在Google上寻找可以在SplitButton
中使用的商业级WPF ToolBar
控件。 SplitButton
是您可以点击Button
的主要部分以执行默认操作,或点击右侧的小三角形以获取备用操作的下拉菜单的ToolBar
。
我在网上找到了几个(包括CodeProject上的一个,包括CodePlex上的两个)。它们都不能在SplitButton
中正常工作 - 它们要么根本不显示,要么没有工具栏按钮样式。我甚至看过一些商业产品,比如ActiPro的弹出按钮(在他们的SharedLibrary DLL中)。同样的问题。
是的,我已经看过所有帖子,关于创建一个是多么容易。创建一个糟糕的内容非常容易,但创建一个看起来像Outlook或Visual Studio中的SplitButton
的内容并不容易,如果释放鼠标按钮,下拉菜单不会消失
所以,这是我的问题:在工具栏中是否存在任何商业级SplitButton
,无论是开源还是商业?我不是在寻找一个控件,它是每年1,500美元订阅某人控件库的一部分,但是如果价格合理{{1}},我肯定想找到它。
答案 0 :(得分:7)
我所知道的唯一真正的“商业级”分割按钮是Syncfusion的按钮,它作为功能区控件的一部分包含在内(虽然它也可以在功能区外工作)。
话虽如此,我记得this implementation如果你正在寻找免费的东西,那么它是相当实用和完整的。
答案 1 :(得分:6)
另一个好的免费实现似乎拥有一切:
http://huydinhpham.blogspot.com/2008/09/wpf-drop-down-and-split-button.html
答案 2 :(得分:3)
我不知道你在分割按钮中究竟是在寻找什么,但这个关于如何创建一个视频的视频是非常完整的,并且制作了一个完美的分割按钮。
http://windowsclient.net/learn/video.aspx?v=3929
我知道你不想要一个教程,但我以前用过这个,你无法区分它和outlook中的那些。
答案 3 :(得分:3)
WPF和Silverlight在Delay的博客上有一个非常好的拆分按钮实现:
答案 4 :(得分:3)
Extended WPF Toolkit Community Edition(免费)有一个不错的SplitButton
(它还有一个DropDownButton
)
<xctk:SplitButton Content="Click Me">
<xctk:SplitButton.DropDownContent>
<xctk:ColorCanvas />
</xctk:SplitButton.DropDownContent>
</xctk:SplitButton>
答案 5 :(得分:1)
我认为你的意思叫做DropDownButton。 MenuItem“StaysOpenOnClick”上有一个布尔属性,可以解决您的问题。
答案 6 :(得分:0)
我一直在寻找相同的东西,只是自己动手(你需要根据自己的喜好进行设计(以匹配ToolBar),你可以重构它/将其转换为自定义控件......等等。)
<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>
答案 7 :(得分:0)
使用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;
}
}
}