Подтвердить что ты не робот

WPF SplitButton?

Я только что потратил очень неудачный послеобеденный траловый Google, ищущий коммерческий WPF SplitButton, который будет работать в ToolBar. A SplitButton - это тот, где вы можете щелкнуть основную часть Button, чтобы принять действие по умолчанию, или щелкнуть по маленькому треугольнику справа, чтобы получить раскрывающееся меню альтернативных действий).

Я нашел несколько в Интернете (в том числе и на CodeProject, и в том числе на CodePlex). Ни один из них не работает должным образом в ToolBar - они либо вообще не появляются, либо у них нет стиля кнопок на панели инструментов. Я даже посмотрел на некоторые коммерческие предложения, такие как всплывающая кнопка ActiPro (в их SharedLibrary DLL). Те же проблемы.

И да, я видел все сообщения о том, как легко создать его. Очень просто создать плохой, но не так просто создать тот, который выглядит и работает как SplitButton в Outlook или Visual Studio, где раскрывающееся меню не исчезает, если вы отпустите кнопку мыши.

Итак, вот мой вопрос: есть ли какой-либо коммерческий класс SplitButton, открытый или открытый, который работает в панелях инструментов? Я не ищу элемент управления, который является частью ежегодной подписки на 1500 долларов для кого-то, контролирующего библиотеку, но если есть разумная цена SplitButton, я бы точно ее нашел.

4b9b3361

Ответ 1

Единственная истинная кнопка разделения "коммерческого класса", о которой я знаю, - это Syncfusion, которая включена как часть их ленточное управление (хотя оно работает и за пределами ленты).

Это, как говорится, я помню эту реализацию как достаточно полезную и полную, если вы ищете что-то бесплатное.

Ответ 2

Еще одна хорошая бесплатная реализация, которая, кажется, имеет все:

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

  • Кнопка разделения может использоваться на панели инструментов и имеет подходящий стиль панели инструментов. Он также может быть рестайлингом, если вы хотите.
  • Выпадающее меню открывается через свое собственное свойство - т.е. функция splitbutton может иметь собственное контекстное меню отдельно от раскрывающегося списка (хотя в некоторых случаях это кажется нелогичным, что может быть полезно в некоторых случаях - например, контекстное меню панели инструментов, которое появляется при щелчке правой кнопкой мыши на кнопке, расположенной на панели инструментов).
  • Выпадающее меню является стандартным ContextMenu - то есть контент может быть привязан к базе данных, элементы меню рестайлинг и т.д.
  • Как основная, так и выпадающая части кнопки разделения имеют связанные с ними свойства команд.

Ответ 4

Extended WPF Toolkit Community Edition (который является бесплатным) имеет приятный SplitButton (и он имеет DropDownButton, а также )

SplitButton screen capture

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

Ответ 5

Я не знаю, что именно вы ищете в сплите-кнопке, но это видео о том, как его создать, довольно полно и делает splitbutton, который почти идеален.

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

Я знаю, что вам не нужен учебник, но я использовал это раньше, и вы не могли отличить его от того, что было в Outlook.

Ответ 6

Я думаю, что вы имеете в виду, называется DropDownButton. В MenuItem "StaysOpenOnClick" существует логическое свойство, которое может решить вашу проблему.

Ответ 7

Я искал то же самое и просто скакал самостоятельно (вам нужно будет по вкусу (в соответствии с 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>

Ответ 8

Использование кнопки разделения WPF Toolkit для отображения контекстного меню достаточно прост. Добавьте контекстное меню в ресурсы вашего окна. В окне загрузки - привяжите контекстное меню к кнопке разделения, а затем используйте контекстное меню, как обычно.

Это действительно нужно добавить в WPF Toolkit, поскольку основной вариант использования этой кнопки - это репликация старой кнопки 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;
        }
    }
}