我正在动态生成按钮。 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
的总和不超过250px。
问题:有没有办法以编程方式控制ItemsControl中项目之间的空间?更重要的是,ItemsControl使用什么机制来隔离其中的项目?
答案 0 :(得分:1)
您应该使用WrapPanel而不是StackPanel。 WrapPanel允许内容环绕屏幕而不会离开屏幕。您可以在Windows Phone Toolkit或Telerik的控件或任何其他第三方WrapPanel中使用WrapPanel。
如果使用WP Toolkit,请将您的样式修改为
<Style x:Key="HorizontalStackPanel" TargetType="ItemsControl">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<toolkit:WrapPanel />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Style>