質問者
DataGridやTreeView等のコントロールに対して、マウスホイールでのスクロール方法

質問
すべての返信
-
DataGridやTreeViewのMouseWheelイベントあたりに以下のコード書けばいけると思います~
TreeViewとDataGridで動きを確認しました。
ちなみにC#で書いたのをVBになおしてコンパイルしてないので、エラーがあるかもしれませんが、使うクラスとコードのイメージだけでも。Dim peer As FrameworkElementAutomationPeer = FrameworkElementAutomationPeer.CreatePeerForElement(CType(sender, UIElement)) var scroll = CType(peer.GetPattern(PatternInterface.Scroll), IScrollProvider) ScrollAmount amount = ScrollAmount.NoAmount If (e.Delta < 0) Then amount = ScrollAmount.SmallIncrement Else amount = ScrollAmount.SmallDecrement End If scroll.Scroll(ScrollAmount.NoAmount, amount)
かずき Blog:http://blogs.wankuma.com/kazuki/2009年10月31日 18:21 -
> 2、3行目がC#のままですかね?
ですです^^;
修正、ありがとうございます。多分全部VBのコード↓Dim peer As FrameworkElementAutomationPeer = FrameworkElementAutomationPeer.CreatePeerForElement(CType(sender, UIElement)) Dim scroll As IScrollProvider = CType(peer.GetPattern(PatternInterface.Scroll), IScrollProvider) Dim amount As ScrollAmount = ScrollAmount.NoAmount If (e.Delta < 0) Then amount = ScrollAmount.SmallIncrement Else amount = ScrollAmount.SmallDecrement End If scroll.Scroll(ScrollAmount.NoAmount, amount)
かずき Blog:http://blogs.wankuma.com/kazuki/2009年11月3日 0:53 -
お世話様です。
返事が遅くなって大変に申し訳ございません。
いただいたサンプルソースをSilverLight3で使ってみたのですが、色々と型が宣言されていない等があり、利用できませんでした。
SilverLightは初心者のため、もう少し詳しく教えていただけないでしょうか?
「DataGridやTreeViewのMouseWheelイベントあたりに以下のコード書けばいけると思います~」ということですが、
いただいたサンプルソースを「~.xaml.vb」ファイル内に、関数を用意して記述すればいいのでしょうか?
その関数をたとえば、「<data:DataGrid>」内の「MouseWheel」プロパティにセットすればいいのでしょうか?
本当に初歩的な質問で大変に恐縮いたします。2009年11月4日 7:05 -
> いただいたサンプルソースをSilverLight3で使ってみたのですが、色々と型が宣言されていない等があり、利用できませんでした。
どう使って、どうエラーが出たのか教えてください。最低でも、エラーメッセージをください。
じゃないと、何の型がみつからないのか、判断しかねるので返答できません。
後は、自力で見つける方法としては、同じ名前のクラスをMSDNで探して、Importsする方法もあります。
> 「DataGridやTreeViewのMouseWheelイベントあたりに以下のコード書けばいけると思います~」ということですが、
> いただいたサンプルソースを「~.xaml.vb」ファイル内に、関数を用意して記述すればいいのでしょうか?
> その関数をたとえば、「<data:DataGrid>」内の「MouseWheel」プロパティにセットすればいいのでしょうか?
ButtonのClickイベントと同じで、DataGridとかに、MouseWheelイベントが定義されています。
<data:DataGrid MouseWheel="dataGrid_MouseWheel" />
とでもして、dataGrid_MouseWheelあたりで右クリックして、Eを押せばイベントハンドラが作られると思います。
もしくはMouseWheel=まで入力してTabあたりでもイベントハンドラが作られると思います。
そのイベントハンドラ内に提示したコードを書くということです。
何処までわかって何処までわからないのかわからないので、完全に返答しようとすると超大作の返答になってしまうため
一度この回答で検討してみてください。
その上で、もうちょっとわからない内容をしぼっていただければ、回答できると思います。
かずき Blog:http://blogs.wankuma.com/kazuki/2009年11月4日 10:54 -
ご連絡が遅くなり大変に申し訳ございませんでした。
教えていただきました通り、イベントハンドラを作成し、教えていただいたコードをそのイベントハンドラへコピーしました。
下記の通りエラーになりました。
Private Sub MouseWheelScroll(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs)
Dim peer As FrameworkElementAutomationPeer = FrameworkElementAutomationPeer.CreatePeerForElement(CType(sender, UIElement))
Dim scroll As IScrollProvider = CType(peer.GetPattern(PatternInterface.Scroll), IScrollProvider)
Dim amount As ScrollAmount = ScrollAmount.NoAmount
If (e.Delta < 0) Then
amount = ScrollAmount.SmallIncrement
Else
amount = ScrollAmount.SmallDecrement
End If
scroll.Scroll(ScrollAmount.NoAmount, amount)
End Sub
エラー内容:
「FrameworkElementAutomationPeer」→「型 'FrameworkElementAutomationPeer' が定義されていません。」
「IScrollProvider」→「型 'IScrollProvider' が定義されていません。」
「ScrollAmount」→「型 'ScrollAmount' が定義されていません。」
「e.Delta」→「'Delta' は 'System.Windows.RoutedEventArgs' のメンバーではありません。」
「ScrollAmount」→「名前 'ScrollAmount' は宣言されていません。」
以上です。これは、何か参照の追加が必要なのでしょうか?
何卒宜しくお願い致します。2009年11月24日 2:55 -
FrameworkElementAutomationPeerのMSDNライブラリへのリンクです。
http://msdn.microsoft.com/ja-jp/library/system.windows.automation.peers.frameworkelementautomationpeer(VS.95).aspx
必要なアセンブリはSystem.Windows.dllなので、通常追加の参照はいりません。
どの名前空間に含まれているか、リンク先に書かれているのでImportsしてください。
恐らく、それでエラーが消えると思います。(別の型についても同様です)
因みに、型名でGoogle検索や、MSDNライブラリを検索すると、いっぱつで上記リンクのページが出てくると思うのですが、どこらへんに躓いていましたか??
かずき Blog:http://blogs.wankuma.com/kazuki/2009年11月24日 8:41 -
お世話様です。
貴重なご連絡ありがとうございました。
MSDNからエラーになっているものがどの名前空間に含まれるか?調べまして、下記の通りにソースを修正しました。
Private Sub MouseWheelScroll(ByVal sender As Object, ByVal e As MouseWheelEventArgs)
Dim peer As Windows.Automation.Peers.FrameworkElementAutomationPeer = Windows.Automation.Peers.FrameworkElementAutomationPeer.CreatePeerForElement(CType(sender, UIElement))
Dim scroll As Windows.Automation.Provider.IScrollProvider = CType(peer.GetPattern(Automation.Peers.PatternInterface.Scroll), Windows.Automation.Provider.IScrollProvider)
Dim amount As Windows.Automation.ScrollAmount = Windows.Automation.ScrollAmount.NoAmount
If (e.Delta < 0) Then
amount = Windows.Automation.ScrollAmount.SmallIncrement
Else
amount = Windows.Automation.ScrollAmount.SmallDecrement
End If
scroll.Scroll(Windows.Automation.ScrollAmount.NoAmount, amount)
End Sub
ですが、上記下線の部分で、下記のエラーが発生し、何のことか?わかりません。
これはどのようにしたらエラー回避できるのでしょうか?
<エラー内容>
「エラー 1 Option Strict On で 'System.Windows.Automation.Peers.AutomationPeer' から 'System.Windows.Automation.Peers.FrameworkElementAutomationPeer' への暗黙的な変換はできません。」
以上、皆様お力をください。宜しくお願い致します。2009年11月25日 3:03