我正在动态生成按钮。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;
}
按钮的数量每次都不同。我需要它们在电话页面上全部可见并分散开,以便用户可以轻松按下按钮。
问题:按钮在 ItemsControl 中以这样的方式展开,如果集合中有超过 8 个按钮,它们就会开始从屏幕上消失。通过在按钮上设置边距来控制空间是可行的,但是我必须针对集合中的每个项目进行调整。在 ItemsControl 上设置 MaxWidth 不起作用。我单独测量了我的按钮,所有按钮的总和.DesiredSize
不超过 250 像素。
问题:有没有办法以编程方式控制 ItemsControl 中项目之间的空间?更重要的是,ItemsControl 使用什么机制来分隔其中的项目?