質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

1518閲覧

WPF、OnManipulationBoundaryFeedbackでスクロールを制御したい

kyosin

総合スコア15

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2019/06/11 03:00

WPFでフォーム上にWebBrowserを置き、
タッチパネルのディスプレイ上でスクロールなど操作をすると、
画面がスクロール境界の限界に達した時、
そのフォームごとずれる動きが発生することがあります。
以下URLでは、自分がまさに抱えている問題になっているのですが、
イベントの追加をしてみても、フォームごとずれる問題は治らない状態です。
https://stackoverflow.com/questions/40004598/how-do-i-prevent-touch-feedback-on-a-winforms-webbrowser-in-wpf

以下に自分のソースを記述します。
どの点を改善することで、OnManipulationBoundaryFeedbackをスルーさせる
ことが出来るのでしょうか?

MainWindow.xamlより <Grid> <WebBrowser IsManipulationEnabled="True" ManipulationBoundaryFeedback="OnManipulationBoundaryFeedback" x:Name="web" HorizontalAlignment="Left" Height="320" VerticalAlignment="Top" Width="517" Source="https://www.google.co.jp"/> </Grid> MainWindow.xaml.csより namespace WpfApplication1 { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); web.ManipulationBoundaryFeedback += OnManipulationBoundaryFeedback; } protected void OnManipulationBoundaryFeedback(object sender, ManipulationBoundaryFeedbackEventArgs e) { e.Handled = true; } } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hihijiji

2019/06/11 03:14

ご提示のURLの TEИ. developer さんの回答は試したのですか?
kyosin

2019/06/11 04:33

継承クラスの作成に手間取りましたが、やっとTEИ. developer さんの解答例を再現させました。 ただ、現状同じ問題が発生したままとなっております。 ソースは以下のようになります。 MainWindow.xaml.csより /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); webBrowser1.Navigate("https://www.google.co.jp"); } protected void OnManipulationBoundaryFeedback(object sender, ManipulationBoundaryFeedbackEventArgs e) { e.Handled = true; } } public class MyClass : WindowsFormsHost { // Override is optional to remove unnecessary behavior protected override void OnManipulationBoundaryFeedback(ManipulationBoundaryFeedbackEventArgs e) { // uncomment this to use base class implementation //base.OnManipulationBoundaryFeedback(e); e.Handled = true; } } MainWindow.xamlより <Window x:Class="WpfApplication1.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:local="clr-namespace:WpfApplication1" xmlns:wfi="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration" xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525"> <Grid> <wfi:WindowsFormsHost IsManipulationEnabled="True" ManipulationBoundaryFeedback="OnManipulationBoundaryFeedback"> <wf:WebBrowser x:Name="webBrowser1"/> </wfi:WindowsFormsHost> </Grid> </Window>
hihijiji

2019/06/11 04:43

せっかく作った MyClass 使ってないですよ。 使うのは wfi:WindowsFormsHost じゃなくて MyClass です。
kyosin

2019/06/11 05:32

<local:MyClass IsManipulationEnabled="True" ManipulationBoundaryFeedback="OnManipulationBoundaryFeedback"> <wf:WebBrowser x:Name="webBrowser1" /> </local:MyClass> MyClassへと変更してみましたが、状況に変化は無く、画面を掴んでスクロールすると画面全体が動いてしまう症状のままとなっています。 上記の記述に問題があるのでしょうか?
hihijiji

2019/06/11 06:31

あんまり関係ないとは思いますが、Window のイベントハンドラが余計なぐらいですね。 微妙なタイミングの問題みたいに書いてあるので環境によって違うのかもしれません。
takabosoft

2019/06/11 06:44

TEИ. developerさんのは自前コントロールだと上手くいくと書いてあります。今回はwebbrowserなので事情が違うのかもしれませんね。
kyosin

2019/06/11 07:02 編集

確かにWindow のイベントハンドラが邪魔になりそうなので、 コメント化や別関数名に変えてみましたが、 「例外がスローされました: 'System.Windows.Markup.XamlParseException' 」の エラーが発生しております。 てっきりXAML上で、<local:MyClass>と書いたことにより MyClass内のオーバーライド中の「ManipulationBoundaryFeedback="OnManipulationBoundaryFeedback"」が 指定されているのかと思いましたが、現状だとMainWindowクラスにおける邪魔そうな関数、 private void OnManipulationBoundaryFeedback(object sender, ManipulationBoundaryFeedbackEventArgs e) { e.Handled = true; } こちらが参照されているようです。 指定方法自体が間違っているのでしょうか?
kyosin

2019/06/11 07:25

何度もありがとうございます! <local:MyClass> <wf:WebBrowser x:Name="webBrowser1" /> </local:MyClass> XAML側に記述が残っていたので、消してみましたが、 やはり問題が解決出来ていない状態です。(スクロール限界で画面も動く) ほかの方法も提示いただいておりますので、試してみようと思います。
guest

回答1

0

自己解決

お疲れ様です。
あの後試行錯誤しましたが、プログラムでの対応が出来なかった為、
レジストリ書き換えによる強制的な対応をとりました。

HKEY_CURRENT_USER\Software\Microsoft\Wisp\Touch Bouncing を 0 と記入

仮にキーが無い場合はレジストリキーを作成することで対応しております。
症状自体はレジストリを切り替えることで収まった為、これ以上時間をかけずに行きたいと思います。
ご協力いただいた方、ありがとうございました。

投稿2019/06/13 09:44

kyosin

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問