web-dev-qa-db-ja.com

WPF SplitButton?

SplitButtonで機能する商用グレードのWPFToolBarコントロールを探して、非常にイライラする午後をGoogleでトロールしました。 SplitButtonは、Buttonの主要部分をクリックしてデフォルトのアクションを実行するか、右側の小さな三角形をクリックして代替アクションのドロップダウンメニューを表示できるものです。 )。

私はウェブ上でいくつかを見つけました(CodeProject上のものとCodePlex上の2つを含む)。 ToolBarで正しく機能するものはありません。まったく表示されないか、ツールバーボタンのスタイルがありません。 ActiProのポップアップボタン(SharedLibrary DLL内)など、いくつかの商用製品も調べました。同じ問題。

そして、はい、私はそれを作成することがいかに簡単であるかについてのすべての投稿を見てきました。悪いものを作成するのは非常に簡単ですが、マウスボタンを離してもドロップダウンメニューが消えないOutlookまたはVisualStudioのSplitButtonsのように見えるものを作成するのはそれほど簡単ではありません。

だから、ここに私の質問があります:ツールバーで動作する、オープンソースまたは商用の商用グレードのSplitButtonsはありますか?誰かのコントロールライブラリへの年間サブスクリプション$ 1,500の一部であるコントロールを探していませんが、手頃な価格のSplitButtonがあれば、きっと見つけたいと思います。

20
David Veeneman

私が知っている唯一の真の「商用グレード」の分割ボタンは、 Syncfusion によるものです。これは、リボンコントロールの一部として含まれています(リボンの外側でも機能します)。

そうは言っても、無料のものを探しているなら、 この実装 はかなり使いやすく完全であると覚えています。

7
Reed Copsey

それをすべて持っているように見える別の良い無料の実装:

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

  • 分割ボタンはツールバーで使用でき、適切なツールバースタイルを備えています。必要に応じてスタイルを変更することもできます。
  • ドロップダウンメニューは、独自のプロパティを介して公開されます。つまり、splitbuttonは、ドロップダウンメニューとは別の独自のコンテキストメニューを持つことができます(非論理的に見える場合もありますが、ボタンを右クリックするとポップアップするツールバーコンテキストメニューなど)。ツールバーに配置)。
  • ドロップダウンメニューは標準のContextMenuです。つまり、コンテンツをデータバインドしたり、メニュー項目のスタイルを変更したりできます。
  • 分割ボタンのメイン部分とドロップダウン部分の両方に、コマンドプロパティが関連付けられています。
6
Alex_P

Extended WPF Toolkit Community Edition (無料)にはNice SplitButtonがあります(また、DropDownButtonもあります)

SplitButton screen capture

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

WPFとSilverlightover Delayのブログには、かなり優れた分割ボタンの実装があります。

Banana SplitButton(SplitButtonのWPF固有の修正、およびSilverlightバージョンのコード分析の改善もあります)

3
huseyint

分割ボタンで何を探しているのか正確にはわかりませんが、分割ボタンの作成方法に関するこのビデオはかなり完成しており、ほぼ完璧な分割ボタンを作成します。

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

チュートリアルが必要ないことは知っていますが、これは以前に使用したことがあり、Outlookのものとの違いがわかりませんでした。

3
Anderson Imes

私はあなたが意味することはDropDownButtonと呼ばれていると思います。 MenuItem "StaysOpenOnClick"には、問題を解決できるブールプロパティがあります。

1
codymanix

私は同じものを探していて、自分でロールしました((ツールバーに一致するように)好みに合わせてスタイルを設定する必要があり、リファクタリング/カスタムコントロールに変換できます...など)

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

WPFツールキットの分割ボタンを使用してコンテキストメニューを表示するのは、かなり簡単です。ウィンドウリソースにコンテキストメニューを追加します。ウィンドウの読み込み時に-コンテキストメニューを分割ボタンにバインドしてから、通常どおりにコンテキストメニューを使用します。

このボタンの主な使用例は古いWinFormSplittボタンを複製することであるため、これをWPFツールキットに追加する必要があります。

enter image description here

<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;
        }
    }
}
0
d347hm4n