0

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

4

1 回答 1

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>
于 2013-10-16T23:07:15.120 回答