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

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

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

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

WPF

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

Q&A

解決済

2回答

4245閲覧

ListBoxで複数項目を連続入力する

propg

総合スコア113

C#

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

WPF

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

0グッド

0クリップ

投稿2017/02/03 10:13

明細を連続で入力する仕組みを考えています。

ListBoxのItemTemplate内で複数の入力コントロールを配置して一覧明細的に表示、入力できるか試してみました。

xaml

1 <ListBox x:Name="listBox" HorizontalAlignment="Left" Height="189" Margin="32,158,0,0" VerticalAlignment="Top" Width="350" 2 ItemsSource="{Binding InputList}"> 3 <ListBox.ItemTemplate> 4 <DataTemplate> 5 <StackPanel Orientation="Horizontal"> 6 <TextBox Text="{Binding Value1}" HorizontalAlignment="Stretch" Width="100"/> 7 <TextBox Text="{Binding Value2}" HorizontalAlignment="Stretch" Width="50"/> 8 <TextBox Text="{Binding Value3}" HorizontalAlignment="Stretch" Width="150"/> 9 </StackPanel> 10 </DataTemplate> 11 </ListBox.ItemTemplate> 12 </ListBox>

実行イメージ

1行目の最初のテキストボックスをクリックして入力、次、次とタブで移動するところまではよいのですが、その次にタブを押すと、リストボックスからはフォーカスが外れて違うコントロールに移動してしまいます。

このような場合のフォーカス制御はどこに記載すべきでしょうか。
1行目3つ目のテキストボックスでタブを押したら2行目1つ目のテキストボックスへフォーカス移動したいです。

また、特定のキーを押したら次の行に移動できるような仕組みも実現したいと思っています。

そもそもこのような明細入力の場合、ListBoxではなく他のコントロールを使うべきでしょうか。


提示しましたサンプルはテキストボックスが並んでいるだけなので、DataGridでも対応できると思いますが、実際には1明細20項目くらいのいろんなコントロールやラベルの混在したレイアウトにする予定です。

詳しい方いらっしゃいましたら、ご教示ください。

WPF, C#, Livet使用しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

ItemsControlとscrollviewerを使うといいんじゃないでしょうか。
ListBoxはリストの中のものを選択するが役割のコントロールで、いろいろなことをやっています。
現在表示されていることなら、ItemsControlとscrollviewerの組み合わせで表現できることです。

フォーカスは、behaviorを使うのがクールらしいですね。
今回のやりたいことから外れますが、VMからフォーカスの操作は、VMからViewの操作になるので、MVVM的に工夫が必要なところです。

http://stackoverflow.com/questions/1356045/set-focus-on-textbox-in-wpf-from-view-model-c

投稿2017/02/03 10:48

編集2017/02/03 10:58
kiichi54321

総合スコア1984

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

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

propg

2017/02/03 11:28

早速の回答ありがとうございました。 ScrollViewerにItemsControlでListBoxを差し替えてみたところ、各行末尾の次は次の行に移動しました。 フォーカス制御は必要ですが、大変参考になりました。 言語に関わらず、フォーカス制御は難しいですね。 ご回答参考にもう少し作りこんでみます
guest

0

ListBox などでフォーカスなどの挙動を操作しようとすると病気になりそうなので、DataGrid を使ってます。
DataGrid には DataGridTemplateColumn があるので殆どのコントロールを使えます。
というか、DataGridTemplateColumn 以外のカラムはめったに使いません。

投稿2017/02/03 10:29

hihijiji

総合スコア4150

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

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

propg

2017/02/03 11:32

回答ありがとうございます。 DataGridをGridとして使わない方法もあるんでしょうか。 一覧系の入力であればDataGridが一番楽そうな気はしましたが、1明細のレイアウトを元の紙帳票のレイアウトイメージに近い形にしたいという要望もあり、悩ましいところです。 1明細当りの入力項目が多い場合、DataGridではどのように表現するものでしょうか?
hihijiji

2017/02/04 01:11

>DataGridをGridとして使わない方法 ないことは無いでしょうけど、そこまでして DataGrid を使うメリットは少ないと思います。 >1明細当りの入力項目が多い場合、DataGrid ではどのように表現するものでしょうか? 普通にカラムを増やして、満足のいく結果にならなければ別の方法を取るのが吉かと
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問