Microsoft Edge WebView2のカスタムタイトルバーで、ウィンドウの上端をつかんでも移動できない場合は、WebView2 Runtime 152の修正前Preview Runtimeに起因している可能性があります。Microsoftは、Preview Runtime 152.0.4181.0で「カスタムタイトルバーの上端からウィンドウをドラッグできない問題」を修正済みです。
対処の基本は、WebView2 Runtimeを152.0.4181.0またはそれ以降へ更新し、アプリを完全終了して起動し直すことです。2026年8月27日には、修正版より新しいStable版WebView2 Runtime 152.0.4191.53も公開されています。本番環境では、Preview RuntimeではなくStable版152以降を優先するとよいでしょう。(Microsoft Learn)
ただし、ウィンドウ上端だけでなくカスタムタイトルバー全体をドラッグできない場合は、Runtimeの問題だけでなく、IsNonClientRegionSupportEnabledやCSSのドラッグ領域も確認する必要があります。
WebView2のカスタムタイトルバーを上端からドラッグできない問題を修正
Microsoftが修正したのは、WebView2のカスタムタイトルバーにおいて、ウィンドウ最上部の境界付近をドラッグしてもホストウィンドウが移動しない問題です。
公式リリースノートでは、Preview Runtime 152.0.4181.0の不具合修正として明記されています。(Microsoft Learn)
| 項目 | 内容 |
|---|---|
| 発生する操作 | カスタムタイトルバーの上端をドラッグしてウィンドウを移動する |
| 主な原因 | 修正前のWebView2 Preview Runtime 152側の不具合 |
| 公式に記録された修正版 | Preview Runtime 152.0.4181.0 |
| 対応するPrerelease SDK | Microsoft.Web.WebView2 1.0.4181-prerelease |
| 本番環境で使える新しいRuntimeの例 | Stable Runtime 152.0.4191.53 |
| 基本的な対処 | Runtimeを更新し、アプリを完全に再起動する |
ここで注意したいのは、1.0.4181-prereleaseはWebView2 SDKのバージョンであり、152.0.4181.0は実際にWebコンテンツを処理するRuntimeのバージョンだという点です。
今回の修正はRuntime側のリリースノートに記載されています。そのため、NuGetパッケージだけを更新しても、アプリが古いRuntimeで動き続けていれば問題が解消しない可能性があります。WebView2では変更内容によって、SDK、Runtime、またはその両方の更新が必要です。(Microsoft Learn)
最初に実行中のWebView2 Runtimeを確認する
インストール済みRuntimeのフォルダーや、プロジェクトで参照しているSDKだけを見ても、実際にアプリがどのRuntimeを使用しているかは判断できません。
アプリの初期化後に、BrowserVersionStringを取得するのが確実です。
using Microsoft.Web.WebView2.Core;
using System.Diagnostics;
await webView2.EnsureCoreWebView2Async();
string runtimeVersion =
webView2.CoreWebView2.Environment.BrowserVersionString;
Debug.WriteLine($"WebView2 Runtime: {runtimeVersion}");
Preview Channelを使用している場合は、バージョン番号にbeta、dev、canaryなどのチャンネル名が含まれることがあります。BrowserVersionStringは、現在のWebView2 Environmentが実際に使用しているRuntimeの情報を返します。(Microsoft Learn)
修正版以上かをコードで判定する場合は、単純な文字列比較ではなく、WebView2が提供する比較メソッドを使います。
using Microsoft.Web.WebView2.Core;
await webView2.EnsureCoreWebView2Async();
string currentVersion =
webView2.CoreWebView2.Environment.BrowserVersionString;
bool isFixedVersionOrLater =
CoreWebView2Environment.CompareBrowserVersions(
currentVersion,
"152.0.4181.0") >= 0;
確認結果が152.0.4181.0以降であれば、Microsoftが修正を記録したバージョン以上です。ただし、バージョンが条件を満たしていてもドラッグできない場合は、後述する設定やCSSを確認してください。
配布方式に合わせてWebView2 Runtimeを更新する
WebView2 Runtimeの更新方法は、アプリがEvergreen、Preview Channel、Fixed Versionのどれを使用しているかで異なります。
| 配布方式 | 更新方法 | 注意点 |
|---|---|---|
| Evergreen Runtime | 自動更新または公式インストーラーで最新化 | 更新後にアプリの再起動が必要 |
| Edge Preview Channel | Beta、Dev、Canaryを更新 | アプリ側でPreview Channelを選択する設定が必要 |
| Fixed Version Runtime | 新しいRuntime一式をアプリに同梱して再配布 | 端末側では自動更新されない |
Evergreen Runtimeを使用している場合
Evergreen Runtimeは、通常、自動的に更新されます。一般的な本番アプリでは、この方式が推奨されています。(Microsoft Learn)
次の順番で対応します。
- WebView2を使用するアプリを終了します。
- タスクトレイやバックグラウンドでアプリが残っていないことを確認します。
- WebView2 Evergreen Runtimeを最新化します。
- アプリを起動し直します。
BrowserVersionStringで実行中のバージョンを再確認します。- タイトルバー上端のドラッグを再テストします。
Evergreen Runtimeの新しいバージョンが端末へダウンロードされても、起動中のアプリは古いWebView2 Environmentを使い続けることがあります。新しいRuntimeを使用するには、以前のEnvironmentをすべて解放するか、アプリを再起動する必要があります。(Microsoft Learn)
単にウィンドウを閉じるだけでは常駐プロセスが残るアプリもあります。その場合は、タスクマネージャーで対象アプリ本体のプロセスが終了していることを確認してください。ほかのアプリも利用している可能性があるため、すべてのmsedgewebview2.exeを無差別に終了する方法は避けたほうが安全です。
Preview Runtimeで修正版をテストする場合
Prerelease SDKを使用した開発環境では、Microsoft Edge Beta、Dev、Canaryに含まれるWebView2 Preview Runtimeを使用します。
ただし、Edge Canaryをインストールしただけでは、アプリがCanaryを使用するとは限りません。WebView2の既定の検索順序は、安定性の高いRuntimeから順番になっています。
WebView2 Runtime Stable
→ Edge Beta
→ Edge Dev
→ Edge Canary
そのため、Stable Runtimeが端末にあると、Preview Channelより先にStable Runtimeが選択されます。Preview Runtimeを優先するには、WebView2初期化前にChannelSearchKindをLeastStableへ変更します。(Microsoft Learn)
using Microsoft.Web.WebView2.Core;
var options = new CoreWebView2EnvironmentOptions
{
ChannelSearchKind = CoreWebView2ChannelSearchKind.LeastStable
};
var environment =
await CoreWebView2Environment.CreateAsync(
null,
null,
options);
await webView2.EnsureCoreWebView2Async(environment);
初期化後は、必ずBrowserVersionStringを出力し、意図したPreview Runtimeが選択されたことを確認してください。
Preview Channelは不具合の先行検証や互換性テストに適しています。一方、一般ユーザーへ提供する本番アプリでは、特別な理由がない限りStable Evergreen Runtimeを使用するのが現実的です。
Fixed Version Runtimeを使用している場合
Fixed Version Runtimeは、アプリに特定バージョンのWebView2 Runtimeを同梱する方式です。端末にインストールされているEvergreen Runtimeを更新しても、アプリが同梱版を参照していれば動作は変わりません。
次の手順で更新します。
- WebView2のFixed Version Runtime 152.0.4191.53または、それ以降を入手します。
- Runtimeパッケージを新しいバージョン用フォルダーへ展開します。
- Runtime内の一部ファイルだけでなく、展開された一式をアプリへ含めます。
BrowserExecutableFolderが新しいフォルダーを参照するように変更します。- アプリを再ビルドして配布します。
- 配布先で
BrowserVersionStringを確認します。
Fixed Version Runtimeは自動更新されないため、開発者側で新しいRuntimeをアプリへ組み込み、再配布する必要があります。また、公式ドキュメントでは、パッケージのフォルダー構成を正しく保つため、エクスプローラーによる展開を避け、expandコマンドなどを利用する方法が案内されています。(Microsoft Learn)
古いフォルダーを上書きするより、バージョン番号ごとに新しいフォルダーを作成したほうが、参照先の間違いやファイルの混在を防ぎやすくなります。
Runtimeを更新してもドラッグできない場合の確認項目
WebView2 Runtimeを修正版へ更新しても改善しない場合は、Runtimeの不具合とは別の原因を確認します。
IsNonClientRegionSupportEnabledを有効にする
Webページ側でドラッグ可能領域を指定するには、IsNonClientRegionSupportEnabledを有効にする必要があります。
この設定は既定でfalseです。また、設定変更は次のナビゲーションから反映されます。(Microsoft Learn)
await webView2.EnsureCoreWebView2Async();
webView2.CoreWebView2.Settings
.IsNonClientRegionSupportEnabled = true;
// 設定後に実際のページへ移動する
webView2.CoreWebView2.Navigate(startUrl);
すでにページを表示した後で設定を変更した場合は、再読み込みまたは再ナビゲーションが必要です。
webView2.CoreWebView2.Settings
.IsNonClientRegionSupportEnabled = true;
webView2.CoreWebView2.Reload();
この設定が無効なままだと、CSSでドラッグ領域を指定しても無視されます。
CSSにドラッグ可能領域を設定する
カスタムタイトルバーには、app-region: dragまたは-webkit-app-region: dragを設定します。ボタンやリンクなど、クリック操作が必要な要素にはno-dragを設定します。
.app-titlebar {
height: 40px;
-webkit-app-region: drag;
app-region: drag;
}
.app-titlebar button,
.app-titlebar a,
.app-titlebar input,
.app-titlebar select {
-webkit-app-region: no-drag;
app-region: no-drag;
}
WebView2では、ドラッグ領域として指定された部分がWindowsのタイトルバーに相当する非クライアント領域として扱われます。右クリックによるシステムメニューや、ダブルクリックによる最大化・元のサイズへの復元も、この仕組みに含まれます。(Microsoft Learn)
CSSを確認するときは、次の点にも注意してください。
- タイトルバー要素の高さが
0になっていないか - 透明な要素がタイトルバーの上に重なっていないか
- 親要素や全面配置要素に
no-dragが設定されていないか - 最小化、最大化、閉じるボタンの領域まで
dragにしていないか - JavaScriptで追加したオーバーレイが上端を覆っていないか
- 高DPI環境でWebView2の位置や高さがずれていないか
DevToolsの要素選択機能を使い、マウスポインター位置にある最前面の要素を確認すると、透明な要素による重なりを見つけやすくなります。
アプリが古いRuntimeプロセスを再利用していないか確認する
Runtime更新後にWebView2コントロールだけを作り直しても、同じユーザーデータフォルダーにひも付いた既存のブラウザプロセスが残っていると、古いRuntimeが再利用される場合があります。
Preview Channelの選択設定やRuntimeの変更は、新しく作成されるWebView2ブラウザプロセスに適用されます。確実に切り替えるには、アプリを再起動するか、同じユーザーデータフォルダーを共有するWebView2コントロールをすべて作り直す必要があります。(Microsoft Learn)
確認時には、次の順番を守ります。
- アプリを完全終了する
- RuntimeまたはPreview Channelを更新する
- アプリを起動する
BrowserVersionStringを記録する- ドラッグ動作を確認する
Fixed Version Runtimeの参照先を確認する
アプリの配布物に新しいRuntimeを追加しても、BrowserExecutableFolderが古いフォルダーを参照したままでは修正版に切り替わりません。
次のようなログを起動時に残しておくと、配布後の確認が容易になります。
await webView2.EnsureCoreWebView2Async();
var environment = webView2.CoreWebView2.Environment;
Debug.WriteLine(
$"Runtime Version: {environment.BrowserVersionString}");
Debug.WriteLine(
$"User Data Folder: {environment.UserDataFolder}");
「パッケージに何を入れたか」ではなく、実際にどのRuntimeでWebView2 Environmentが作成されたかを基準に判断してください。
一時的な手動ドラッグ処理は恒久対策にしない
Runtimeの修正版が提供されている状況で、JavaScriptのpointermoveやホスト側のマウスイベントを使ってウィンドウ座標を直接変更する回避策を恒久的に残すことはおすすめできません。
独自の手動ドラッグ処理は、次のような問題につながる可能性があります。
- Windowsのスナップレイアウトが正しく動かない
- 高DPI環境で移動量がずれる
- 複数ディスプレイ間の移動で座標がずれる
- タッチ操作やペン操作に対応できない
- ダブルクリック最大化が動かない
- システムメニューとの動作が不整合になる
まずRuntimeを更新し、その後にWebView2標準の非クライアント領域設定とCSSを確認する順番が適切です。
修正後に確認するテスト項目
単にタイトルバー中央をドラッグできるかだけでなく、上端やウィンドウ操作ボタン周辺も確認します。
| 確認箇所 | 期待する結果 |
|---|---|
| タイトルバー中央 | ウィンドウを移動できる |
| ウィンドウ最上端 | ドラッグ開始できる |
| 最小化ボタン付近 | ボタンを操作でき、誤ってドラッグされない |
| 最大化ボタン付近 | クリック操作とホバー表示が正常 |
| 閉じるボタン付近 | 閉じる操作が正常 |
| タイトルバーのダブルクリック | 最大化と元のサイズへの復元が動作する |
| タイトルバーの右クリック | システムメニューが表示される |
| 複数ディスプレイ間 | ウィンドウを正常に移動できる |
| 表示倍率125%・150% | ドラッグ領域にずれがない |
Runtimeの更新確認とUI設定の確認を同時に行うと原因が分からなくなります。最初に実行中のRuntimeを確認し、修正版へ切り替わったことを確定させてから、CSSや非クライアント領域の設定を調査してください。
WebView2 Runtime 152以降へ更新してから設定を見直す
WebView2のカスタムタイトルバーを上端からドラッグできない問題は、MicrosoftによってPreview Runtime 152.0.4181.0で修正されています。
対応の優先順位は次のとおりです。
BrowserVersionStringで実行中のRuntimeを確認する- Preview Runtime 152.0.4181.0または、それ以降へ更新する
- 本番環境ではStable Runtime 152以降を使用する
- アプリを完全終了して再起動する
- 改善しない場合は
IsNonClientRegionSupportEnabledを確認する app-region: dragとno-dragの指定を確認する- Fixed Versionの場合は参照フォルダーと配布物を確認する
特に重要なのは、SDKのバージョンではなく、アプリが実際に使用しているWebView2 Runtimeのバージョンを確認することです。修正版へ更新したつもりでも、古いRuntimeプロセスやFixed Versionの参照先が残っていれば、問題は解消しません。

コメント