前提・実現したいこと
C#でWindowsフォームアプリケーションを作成しています。
ElementHostコントロールを介して、WPFユーザーコントロールを配置しており、その中にはListViewコントロールを使用しています。
ListView内の項目選択を変更するためにキーボードの上/下/左/右キー操作した際、WPFユーザーコントロールからフォーカスが外れてしまい、WinFormsの別のコントールにフォーカスが移動してしまいます。
ListView内にフォーカスを留まらせる方法がもし分かるようでしたら教えてください。
該当のソースコード
WinFormsのForm1.Designer.cs
C#
1private void InitializeComponent() 2 { 3 this.textBox1 = new System.Windows.Forms.TextBox(); 4 this.elementHost1 = new System.Windows.Forms.Integration.ElementHost(); 5 this.userControl1 = new WindowsFormsApp2.UserControl1(); 6 this.SuspendLayout(); 7 // 8 // textBox1 9 // 10 this.textBox1.Location = new System.Drawing.Point(33, 23); 11 this.textBox1.Name = "textBox1"; 12 this.textBox1.Size = new System.Drawing.Size(100, 19); 13 this.textBox1.TabIndex = 3; 14 // 15 // elementHost1 16 // 17 this.elementHost1.Location = new System.Drawing.Point(33, 48); 18 this.elementHost1.Name = "elementHost1"; 19 this.elementHost1.Size = new System.Drawing.Size(717, 390); 20 this.elementHost1.TabIndex = 1; 21 this.elementHost1.Text = "elementHost2"; 22 this.elementHost1.Child = this.userControl1; 23 // 24 // Form1 25 // 26 this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); 27 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 28 this.ClientSize = new System.Drawing.Size(800, 450); 29 this.Controls.Add(this.textBox1); 30 this.Controls.Add(this.elementHost1); 31 this.Name = "Form1"; 32 this.Text = "Form1"; 33 this.ResumeLayout(false); 34 this.PerformLayout(); 35 36 } 37 38 #endregion 39 private System.Windows.Forms.Integration.ElementHost elementHost1; 40 private UserControl1 userControl1; 41 private System.Windows.Forms.TextBox textBox1;
WPFユーザーコントロールのXAML
C#
1<UserControl x:Class="WindowsFormsApp2.UserControl1" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 5 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 6 xmlns:local="clr-namespace:WindowsFormsApp2" 7 mc:Ignorable="d" Height="178.512" Width="426.86"> 8 <Grid> 9 <ListView x:Name="listView" HorizontalAlignment="Left" Height="136" Margin="20,26,0,0" VerticalAlignment="Top" Width="391"> 10 <ListView.View> 11 <GridView> 12 <GridViewColumn Header="ユーザ名" DisplayMemberBinding="{Binding Name}" Width="100"/> 13 <GridViewColumn Header="年齢" DisplayMemberBinding="{Binding Age}" Width="50"/> 14 <GridViewColumn Header="住所" DisplayMemberBinding="{Binding Path=Address}" Width="200"/> 15 </GridView> 16 </ListView.View> 17 </ListView> 18 </Grid> 19</UserControl>
WPFユーザーコントロールのコードビハインド
C#
1public partial class UserControl1 : UserControl 2 { 3 public UserControl1() 4 { 5 InitializeComponent(); 6 7 ObservableCollection<User> users = new ObservableCollection<User>(); 8 users.Add(new User() { Name = "Yamada", Age = 50, Address = "Tokyo" }); 9 users.Add(new User() { Name = "Suzuki", Age = 30, Address = "Nagoya" }); 10 users.Add(new User() { Name = "Sato", Age = 40, Address = "Osaka" }); 11 12 listView.ItemsSource = users; 13 } 14 }
試したこと
WindowsフォームアプリケーションではなくWPFアプリで、WPFユーザーコントロールを使用した場合、上記の問題は発生しませんでした。
キーボードの上/下/左/右キー操作した際、ListView内からフォーカスは外れません。
補足情報(FW/ツールのバージョンなど)
開発環境:Visual Studio 2017 Express
ターゲットフレームワーク:.NET Framework 4
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/30 02:15