その場でボタンを生成しています。はList<Button>
ItemsControl にバインドされています。
<ItemsControl ItemsSource="{Binding MyButtons}" Padding="0"
Style="{StaticResource HorizontalStackPanel}" />
スタイルの定義は次のとおりです。
<Style x:Key="HorizontalStackPanel" TargetType="ItemsControl">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Margin="0"/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Style>
ボタンは、次のメソッドを使用して生成されます。
private Button MakeAButton(string letter)
{
Button b = new Button
{
Margin = new System.Windows.Thickness(-2),
CommandParameter = letter
};
b.Content = new TextBlock { Text = letter, FontSize = 24, FontFamily = new System.Windows.Media.FontFamily("Segoe UI Mono") };
b.Click += b_Click;
return b;
}
ボタンの数は毎回異なります。ユーザーが簡単にボタンを押すことができるように、それらをすべて電話ページに表示し、分散させる必要があります。
問題: コレクション内に 8 つ以上のボタンがある場合、それらのボタンが画面から消え始めるような方法で、ボタンが ItemsControl 内に広がっています。ボタンにマージンを設定してスペースを制御することはできますが、コレクション内のアイテムの数ごとに調整する必要があります。ItemsControl で MaxWidth を設定しても機能しません。ボタンを個別に測定しましたが、すべての合計.DesiredSize
が 250px を超えません。
質問: ItemsControl 内のアイテム間のスペースをプログラムで制御する方法はありますか? さらに重要なことは、ItemsControl がその中に項目を配置するためにどのメカニズムを使用するかということです。