回答編集履歴

1

見直しキャンペーン中

2023/07/27 13:32

投稿

TN8001
TN8001

スコア9862

test CHANGED
@@ -1,211 +1,106 @@
1
1
  `ListBox`は通常縦に並んだアイテムを選択するコントロールですが、あくまでデフォルトがそういう見た目なだけであって、WPFでは見た目を柔軟にカスタマイズできます。
2
2
 
3
-
4
-
5
3
  前回の回答でも紹介していますが↓の`ItemsPanel`のところを見てください。
6
-
7
4
  [ItemsControl 攻略 ~ 外観のカスタマイズ | grabacr.nét](http://grabacr.net/archives/1240#ItemsPanel)
8
-
9
-
10
5
 
11
6
  コレクション中の**個々のアイテムの並べ方**をカスタマイズするテンプレートです。
12
7
 
13
-
14
-
15
8
  指定できるのは[Panel](https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.controls.panel)クラスの派生クラスです。
16
-
17
-
18
9
 
19
10
  [Canvas](https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.controls.canvas)・[Grid](https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.controls.grid)・[UniformGrid](https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.controls.primitives.uniformgrid)・[StackPanel](https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.controls.stackpanel)([VirtualizingStackPanel](https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.controls.virtualizingstackpanel))・[WrapPanel](https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.controls.wrappanel)あたりでしょうか。
20
11
 
21
-
22
-
23
12
  前回の回答で`UniformGrid`を使ったのは、カレンダーは列数が固定・個々のアイテムサイズが同じという点がぴったりだったためです。
24
-
25
-
26
13
 
27
14
  今回の回答でも`UniformGrid`を使用しましたが、(用途が合えば)大変便利なのですがあまり知られていないような気がします。
28
15
 
29
-
30
-
31
16
  `Canvas`や`Grid`は何もしないとすべて重なってしまうので、あまり`ItemsPanel`向きとは言えないですね。
32
17
 
33
-
34
-
35
18
  しかし実際に使うかは別としてこういった`ListBox`も作成可能です。
36
-
37
19
  [ListBoxをカスタマイズして都道府県の地図を選択するUIを作成する - Yamakiの日記](http://yamaki.hatenablog.com/entry/20071011/1192091886)
38
20
 
39
-
40
-
41
- ```xaml
21
+ ```xml
42
-
43
22
  <Window
44
-
45
23
  x:Class="Questions337152.MainWindow"
46
-
47
24
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
48
-
49
25
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
50
-
51
26
  Width="800"
52
-
53
27
  Height="450">
54
-
55
28
  <Window.Resources>
56
-
57
29
  <!-- サンプルデータ 特に気にする必要はない -->
58
-
59
30
  <ObjectDataProvider
60
-
61
31
  xmlns:linq="clr-namespace:System.Linq;assembly=System.Core"
62
-
63
32
  xmlns:sys="clr-namespace:System;assembly=mscorlib"
64
-
65
33
  x:Key="One2Hundred"
66
-
67
34
  MethodName="Range"
68
-
69
35
  ObjectType="{x:Type linq:Enumerable}">
70
-
71
36
  <ObjectDataProvider.MethodParameters>
72
-
73
37
  <sys:Int32>1</sys:Int32>
74
-
75
38
  <sys:Int32>100</sys:Int32>
76
-
77
39
  </ObjectDataProvider.MethodParameters>
78
-
79
40
  </ObjectDataProvider>
80
-
81
41
  </Window.Resources>
82
-
83
-
84
42
 
85
43
  <UniformGrid Columns="3">
86
44
 
87
-
88
-
89
45
  <GroupBox Header="Nomal(StackPanel Vertical)">
90
-
91
46
  <ListBox ItemsSource="{Binding Source={StaticResource One2Hundred}}" />
92
-
93
47
  </GroupBox>
94
48
 
95
-
96
-
97
49
  <GroupBox Header="StackPanel Horizontal">
98
-
99
50
  <ListBox ItemsSource="{Binding Source={StaticResource One2Hundred}}">
100
-
101
51
  <ListBox.ItemsPanel>
102
-
103
52
  <ItemsPanelTemplate>
104
-
105
53
  <StackPanel Orientation="Horizontal" />
106
-
107
54
  </ItemsPanelTemplate>
108
-
109
55
  </ListBox.ItemsPanel>
110
-
111
56
  </ListBox>
112
-
113
57
  </GroupBox>
114
58
 
115
-
116
-
117
59
  <GroupBox Header="UniformGrid">
118
-
119
60
  <ListBox ItemsSource="{Binding Source={StaticResource One2Hundred}}">
120
-
121
61
  <ListBox.ItemsPanel>
122
-
123
62
  <ItemsPanelTemplate>
124
-
125
63
  <UniformGrid Columns="5" />
126
-
127
64
  </ItemsPanelTemplate>
128
-
129
65
  </ListBox.ItemsPanel>
130
-
131
66
  </ListBox>
132
-
133
67
  </GroupBox>
134
68
 
135
-
136
-
137
69
  <GroupBox Header="WrapPanel Horizontal">
138
-
139
70
  <!-- 横スクロールを規制しないと横に伸びきってしまって、StackPanel Horizontalと同じになってしまう -->
140
-
141
71
  <ListBox ItemsSource="{Binding Source={StaticResource One2Hundred}}" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
142
-
143
72
  <ListBox.ItemsPanel>
144
-
145
73
  <ItemsPanelTemplate>
146
-
147
74
  <WrapPanel />
148
-
149
75
  </ItemsPanelTemplate>
150
-
151
76
  </ListBox.ItemsPanel>
152
-
153
77
  </ListBox>
154
-
155
78
  </GroupBox>
156
79
 
157
-
158
-
159
80
  <GroupBox Header="WrapPanel Vertical">
160
-
161
81
  <!-- 縦スクロールを規制しないと縦に伸びきってしまって、StackPanel Verticalと同じになってしまう -->
162
-
163
82
  <ListBox ItemsSource="{Binding Source={StaticResource One2Hundred}}" ScrollViewer.VerticalScrollBarVisibility="Disabled">
164
-
165
83
  <ListBox.ItemsPanel>
166
-
167
84
  <ItemsPanelTemplate>
168
-
169
85
  <WrapPanel Orientation="Vertical" />
170
-
171
86
  </ItemsPanelTemplate>
172
-
173
87
  </ListBox.ItemsPanel>
174
-
175
88
  </ListBox>
176
-
177
89
  </GroupBox>
178
90
 
179
-
180
-
181
91
  <GroupBox Header="Grid">
182
-
183
92
  <ListBox ItemsSource="{Binding Source={StaticResource One2Hundred}}">
184
-
185
93
  <ListBox.ItemsPanel>
186
-
187
94
  <ItemsPanelTemplate>
188
-
189
95
  <Grid />
190
-
191
96
  </ItemsPanelTemplate>
192
-
193
97
  </ListBox.ItemsPanel>
194
-
195
98
  </ListBox>
196
-
197
99
  </GroupBox>
198
100
 
199
-
200
-
201
101
  </UniformGrid>
202
-
203
102
  </Window>
204
-
205
103
  ```
206
104
 
207
-
208
-
209
105
  ![アプリ画像1](b5ed01cb530d9a92ab4679987ffdb1e6.png)
210
-
211
106
  ![アプリ画像2](ad11491cf4811fbe13360a274fe43817.png)