ItemsControl Windows Phone中的项目间距

时间:2013-10-15 12:06:10

标签: c# wpf windows-phone-7 windows-phone

我正在动态生成按钮。 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使用什么机制来隔离其中的项目?

1 个答案:

答案 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>