locked
ボタンクリック時のイベント発行について RRS feed

  • 質問

  • お世話になります。

    ボタン押下前にユーザにオプションボタンでいずれか選択させた上で処理したいと
    考えており、試しに以下のようなボタンとしてみました。

            <Button Name="button1">
                <Button.Content>
                    <StackPanel Orientation="Horizontal">
                        <RadioButton Content="A" GroupName="RB"></RadioButton>
                        <RadioButton Content="B" GroupName="RB" Margin="10,0,0,0"></RadioButton>
                        <TextBlock Text="SampleButton" Margin="10,0,0,0"></TextBlock>
                    </StackPanel>
                </Button.Content>
            </Button>

    オプションボタンの選択は可能なのですが、オプションボタン選択したあとでボタン
    をクリックしても反応がなく(オプションボタンからフォーカスが抜けるだけ)、
    もう1回ボタンクリックすることでボタンのイベントが発行されるようです。
    ユーザからすると2度クリックすることになるため改善したいのですが何か良い方法は
    ありますでしょうか?

    環境:VisualStudio2010
    Silverlight4

    よろしくお願いします。

    2011年6月28日 5:54

回答

  • 返信ありがとうございました。

    Tetsuaki Uchida様>
    対処方法についてありがとうございました。

    totojo様>
    UI変更の件、大変参考になりました。
    他の箇所でもボタン削減等に適用できそうです。

    ※色々意見を聞きつつ、UIを決めたいと思います。
    人それぞれの好みになってしまうのでしょうが。。。

    • 回答としてマーク schsch_21 2011年6月30日 2:52
    2011年6月30日 2:52

すべての返信

  • 原ButtonのOnMouseLeftButtonDownとOnMouseLeftButtonUpの間でOnLostFocusが発生してしまうことが原因のようです。
    下記は少し副作用がある対処法ですが、簡単にできるものをいくつか。

    対処1 RadioButtonのIsTabStopを"False"にする
    ただし、当然RadioButtonがTabStopしなくなります。

    対処2 ButtonのClickModeプロパティを"Press"にする
    ただし、通常のボタンクリックの挙動と少し変わって、押したらすぐ実行されるようになります。
    (通常はClickMode.Releaseです。)

    # ちなみに、WPFでは発生しないみたいです。
    # これら以外の対処法だと、Buttonを継承してOnMouseLeftButtonDown、OnLostFocus、OnMouseLeftButtonUp等をいじくればできなくはなさそうですが、大変かもです。

    2011年6月28日 10:23
  • いっそのこと、UI を変更するというのはいかがでしょうか。

    次の記事にある MenuButton とか。

    SplitButtoning hairs [Two fixes for my Silverlight SplitButton/MenuButton implementation - and true WPF support] - Delay's Blog - Site Home - MSDN Blogs
    http://blogs.msdn.com/b/delay/archive/2010/06/11/splitbuttoning-hairs-two-fixes-for-my-silverlight-splitbutton-menubutton-implementation-and-true-wpf-support.aspx
    (要 Silverlight Toolkit April 2010)

    あるいは、次の記事にある DropDownButton とか。

    Silverlight で実装した DropDownButton
    http://code.msdn.microsoft.com/Silverlight-DropDownButton-0d11e66a

    よく見かける UI なので、ユーザーも直感的に操作できると思うのですが。

    2011年6月29日 3:06
  • 返信ありがとうございました。

    Tetsuaki Uchida様>
    対処方法についてありがとうございました。

    totojo様>
    UI変更の件、大変参考になりました。
    他の箇所でもボタン削減等に適用できそうです。

    ※色々意見を聞きつつ、UIを決めたいと思います。
    人それぞれの好みになってしまうのでしょうが。。。

    • 回答としてマーク schsch_21 2011年6月30日 2:52
    2011年6月30日 2:52