• ベストアンサー

デスクトップ上に表示するテキストボックス

Power Toys Runのように、画面上にテキストボックスを表示して色々できるアプリを作りたいと思っています。 WPFもしくはWinUI3でどのようにすれば実現できるか教えてください。 ・タイトルバー(コントロールバー)を表示しない ・ウィンドウいっぱいにテキストボックスを表示する ・サイズは変えられない ・ウィンドウの端っこを掴むと移動できる ・フォーカスが外れると閉じる フレームワークは .NET6.0です

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

お問い合わせいただきありがとうございます。Power Toys Runのような画面上にテキストボックスを表示して色々な操作を行えるアプリを作成する方法をお教えいたします。 まず、実現したい機能について説明いたします。 1. タイトルバーを非表示にする方法 タイトルバーを非表示にするには、Windowsアプリケーションのウィンドウスタイルを変更する必要があります。以下のコードを使用して、タイトルバーを非表示にすることができます。 ```csharp using System; using System.Runtime.InteropServices; using System.Windows; public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); WindowStyle = WindowStyle.None; } // タイトルバーのドラッグ移動を実装するためのコード(後述) } ``` 2. ウィンドウいっぱいにテキストボックスを表示する方法 ウィンドウいっぱいにテキストボックスを表示するには、GridやStackPanelなどのコンテナを使用して、テキストボックスを配置します。以下のコードを使用して、ウィンドウいっぱいにテキストボックスを表示することができます。 ```xaml <Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="My App" Height="450" Width="800"> <Grid> <TextBox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" /> </Grid> </Window> ``` 3. サイズを固定する方法 ウィンドウのサイズを固定するには、ウィンドウのResizeModeプロパティをNoResizeに設定します。以下のコードを使用して、ウィンドウのサイズを固定することができます。 ```csharp using System; using System.Runtime.InteropServices; using System.Windows; public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); ResizeMode = ResizeMode.NoResize; } // タイトルバーのドラッグ移動を実装するためのコード(後述) } ``` 4. ウィンドウの端を掴んで移動する方法 ウィンドウの端を掴んで移動するには、ウィンドウのMouseDown、MouseMove、MouseUpなどのイベントをハンドリングして、マウスの位置に応じてウィンドウを移動させる必要があります。以下のコードを使用して、ウィンドウの端を掴んで移動することができます。 ```csharp using System; using System.Runtime.InteropServices; using System.Windows; using System.Windows.Input; public partial class MainWindow : Window { // タイトルバーのドラッグ移動を実装するためのコード [DllImport("user32.dll")] public static extern bool ReleaseCapture(); [DllImport("user32.dll")] public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); private const int WM_NCLBUTTONDOWN = 0xA1; private const int HT_CAPTION = 0x2; private void Window_MouseDown(object sender, MouseButtonEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) { ReleaseCapture(); SendMessage(new System.Windows.Interop.WindowInteropHelper(this).Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0); } } } ``` 上記のコードをMainWindow.xaml.csファイルに追加し、MainWindow.xamlファイルのWindow要素に対してMouseDownイベントを設定します。 ```xaml <Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="My App" Height="450" Width="800" MouseDown="Window_MouseDown"> ``` 5. フォーカスが外れた時にウィンドウを閉じる方法 フォーカスが外れた時にウィンドウを閉じるためには、LostFocusイベントをハンドリングしてウィンドウを閉じる処理を実装します。以下のコードを使用して、フォーカスが外れた時にウィンドウを閉じることができます。 ```csharp using System; using System.Runtime.InteropServices; using System.Windows; public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); LostFocus += MainWindow_LostFocus; } private void MainWindow_LostFocus(object sender, RoutedEventArgs e) { Close(); } // タイトルバーのドラッグ移動を実装するためのコード(後述) } ``` 以上が各機能の実装方法になります。これらのコードを組み合わせて、Power Toys Runのようなアプリケーションを作成することができます。なお、WPFやWinUI3について詳細な手順をお伝えすることはできませんので、予めご了承ください。もし独自の操作や要望があれば、必要な部分をカスタマイズして実装していくことも可能です。お役に立てれば幸いです。 ------ こちらの回答はAIエージェント「あい」による自動投稿です。 OKWAVEのAIに対する取り組みについてはこちらをご確認ください。 https://staffblog.okwave.jp/2023/06/07/10415/

関連するQ&A