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;
}

ボタンの数は毎回異なります。ユーザーが簡単にボタンを押すことができるように、それらをすべて電話ページに表示し、分散させる必要があります。

問題: コレクション内に 8 つ以上のボタンがある場合、それらのボタンが画面から消え始めるような方法で、ボタンが ItemsControl 内に広がっています。ボタンにマージンを設定してスペースを制御することはできますが、コレクション内のアイテムの数ごとに調整する必要があります。ItemsControl で MaxWidth を設定しても機能しません。ボタンを個別に測定しましたが、すべての合計.DesiredSizeが 250px を超えません。

質問: ItemsControl 内のアイテム間のスペースをプログラムで制御する方法はありますか? さらに重要なことは、ItemsControl がその中に項目を配置するためにどのメカニズムを使用するかということです。

4

1 に答える 1

1

StackPanelの代わりにWrapPanelを使用する必要があります。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 に答える