ScrollBar を設けるケースも多いと思います。
以下に、VB.net WPF で ScrollBar の表示位置を Code 側から操作する事を書きたいと思います。
実は、難しい一面 も持ち合わせた方法 なのですが ... 。
通常は、
項目数が多くて、画面内に狙った項目が入ら無い場合が多いと思うのですが、
此処では違います。
項目が長過ぎて、枠外に飛び出すケースなのです。
そして、肝心な(見たい)部分は 其の飛び出した最後部付近 にあったりします。
実行時、横 ScrollBar を操作して、
頻繁に、項目の後ろ側を覗く事が多い。
そんな時は、 最初から、後ろ側を出してよ! となりますね。
でも、簡単には いかない! ので、
此れ迄、我慢して来ました。
重い腰を上げ、
調べ出すと、 例は ... 少ない ですねぇ。
例に依って、C# は豊富な事が多いのに、それすら ... 。
VB.net は 全滅 に近いかも。
きっと、調べ方が悪いのでしょうね。
何とか、参考になりそうなものを見付け、弄って見ました。
そうそう、
此の例では、昔、VB.net + VS2013 で書いてあった 奴 ですので、
同じ環境下で熟します。
おおっ、
此れは 高等テクニック の 様相 です。
とても、 自分では 思い付か無い 思い付け無い 切り口 ですね。
WPF の 根幹 が分かっていなければ、
こんな事は 思い付きませぬ。
凄いね、 凄い人 がいるもんだ!。 ;)
'Add Reference UIAutomationProvider & UIAutomationTypes > Import System.Windows.Automation
Dim peer = Automation.Peers.ItemsControlAutomationPeer.CreatePeerForElement(Me.ListBox1)
'Dim scrollProvider = peer.GetPattern(Automation.Peers.PatternInterface.Scroll)
Dim scrollProvider = CType(peer.GetPattern(Automation.Peers.PatternInterface.Scroll), Automation.Provider.IScrollProvider)
scrollProvider.Scroll(
Automation.ScrollAmount.LargeIncrement,
Automation.ScrollAmount.NoAmount)
実は、此の ListBox は 常時 非表示で、
必要に応じて、現れる様に作ってあります。
ですから、
表示切替の部分に 上記 Code を挿入しました。
組み込んだ後の挙動は、
表示される表示データの分量に左右される様で、
横 ScrollBar の後部に移動しますが、
必ずしも最後(終端)を示す訳では無い様です。
後述の資料では 大きなデクリメントでスクロールするように指定 とあり、
PgUp (/ PgDn) キー 或いは Bar の空白部分をクリック と同等 と書いてあります。
冒頭で、難しい一面 と書いたのは、
此の挙動に依る 表示 の バラツキ が生じる事、 なのです。
まぁ、眼を瞑る事にしましょう。
因みに、
項目数が 0 の場合に、此の部分を通過させる様な 作り だと、
当然、データが無いのにスクロールさせる事になり、
エラーを吐きますので、
転用する場合には、組み込む場所や方法等に、ご留意下さい。
Code の 解説 は省きます。
何たって、 良くは分かっていないのですから ... 。 X(
scrollProvider.Scroll( の 2つの引数 は、
横 縦 の順での ScrollAmount 列挙型 になります。
参考: https://learn.microsoft.com/ja-jp/dotnet/api/system.windows.automation.scrollamount?view=netframework-4.8
似た様な Method で、
ScrollVertical(ScrollAmount)
ScrollHorizontal(ScrollAmount)
もありますね。
また、
SetScrollPercent(Double, Double)
もあったりします。
今迄は、表示させた後で、
大抵のケースで、
おもむろに、手動スクロール ポン! だったのです。
此れからは、 おまかせ で、自動スクロール!。
いやぁ、 便利なものです。
多少の 気難しい挙動 には 眼を瞑って ... 。 ;)
0 件のコメント:
コメントを投稿