locked
Silverlight:ドラッグ時のイベントの設定の仕方 RRS feed

  • 質問

  • いつもお世話になっております。

     

    今回、silverlight/Expressionbrendを使って、複数のトグルボタンを連続して並べてあるものを作りました。

     

    ひとつひとつはBlendのおかげで選択できるのですが、左ボタンをクリックしながら動かす(ドラッグする)ことで、トグルボタンをon状態にできるというのは可能でしょうか。

    2010年8月18日 9:27

回答

  • Grid 中のすべての ToggleButton をチェックするなら、たとえば次のように書けます。

     

    'For Each で先頭から順に操作する
    For Each Item In grid.Children
     'ToggleButton にキャストできるか調べる
     If TypeOf Item Is ToggleButton Then
       'ToggleButton にキャストして、チェック状態にする
       Dim TB As ToggleButton = CType(Item, ToggleButton)
       TB.IsChecked = True
     End If
    Next
    

     

    Visual Basic は不慣れなので、もっと上手な書き方があるかもしれませんが。



    なかむら(http://d.hatena.ne.jp/griefworker)
    • 回答としてマーク sakuko 2010年8月23日 0:36
    2010年8月19日 12:45

すべての返信

  • ToggleButton をドラッグ&ドロップで移動したい、ということでしょうか?

     

    ToggleButton の MouseLeftButtonDown イベントを使えば、ドラッグ&ドロップで移動可能です。

    http://msdn.microsoft.com/ja-jp/library/system.windows.uielement.mouseleftbuttondown(v=VS.95).aspx

     

    ドラッグ&ドロップの実装は下記URLを参考にしてください。

    http://msdn.microsoft.com/ja-jp/library/cc189066(VS.95).aspx

    Rectangle の例ですが、ToggleButton でも同じです。

     


    なかむら(http://d.hatena.ne.jp/griefworker)
    2010年8月18日 9:53
  • なかむら様

    いつもありがとうございます。

    すみません、私の説明不足でした。

    今回、範囲選択をして、中に含まれているトグルボタンをチェック状態にする、ということをしたいと思っております。

    イメージとしてはエクセルのようなものになります。

     

    そこで、教えていただいたドラッグ&ドロップの方法を元に作成してみました。

    このサンプルの中にトグルボタンを置き、Rectangleが動いた範囲内にいるトグルボタンをオン状態にしたいと作成していました。

    なので、MouseMove実行時の中で、for文を回し、範囲内にボタンの存在があったらチェックする、というコードを作っております。

    考えていたのは

    For i As Integer = 0 To Me.grid.Controls.count
                    If grid.Controls(i) = ToggleButton Then
                        Me.tog1.IsChecked = True
                    End If
                Next

    なんですが、どうにもControlsがメンバではないと言われてしまいます。

    これは何か設定が必要なんでしょうか……?

    それとも他になにか良い方法があるんでしょうか(゜-゜)

    2010年8月19日 9:12
  • grid は System.Windows.Controls.Grid クラスのことでしょうか?

    Grid クラスには Controls というプロパティはありません。Grid 内に配置したコントロールは Children プロパティから取得できます。

    http://msdn.microsoft.com/ja-jp/library/system.windows.controls.grid_members(v=VS.95).aspx


    なかむら(http://d.hatena.ne.jp/griefworker)
    2010年8月19日 10:10
  • なかむら様

    おおお!本当です!取得できました。

    なるほど……gridの中身を見てみると、確かにcildrenがありました。

    ありがとうございます。

     

    すみません、重ねて質問よろしいでしょうか。。。

    先ほど書いたコードの

    If grid.children(i) = 【ToggleButton】 Then
                        Me.ToggleButton.IsChecked = True
                    End If

    【】の部分なのですが、型だったのでいれられないようです。

    そこでもしglidの中のコントロールが存在する場合、という条件をつけたいときは、どうすればいいでしょうか。

    trueにすればいいのかと思ったのですが、うまくいきませんでした……

    毎回初歩的な質問で申し訳ありません。

    よろしければお願い致します。

    2010年8月19日 11:23
  • Grid 中のすべての ToggleButton をチェックするなら、たとえば次のように書けます。

     

    'For Each で先頭から順に操作する
    For Each Item In grid.Children
     'ToggleButton にキャストできるか調べる
     If TypeOf Item Is ToggleButton Then
       'ToggleButton にキャストして、チェック状態にする
       Dim TB As ToggleButton = CType(Item, ToggleButton)
       TB.IsChecked = True
     End If
    Next
    

     

    Visual Basic は不慣れなので、もっと上手な書き方があるかもしれませんが。



    なかむら(http://d.hatena.ne.jp/griefworker)
    • 回答としてマーク sakuko 2010年8月23日 0:36
    2010年8月19日 12:45
  • なかむら様

    なるほど、そういう風にしてまとめて操作することができるんですね!

    参考にしながら作っていきたいと思います。

    本当にありがとうございましたm(__)m

    2010年8月23日 0:40