3

その中に WrapPanel と非常によく似たアイテムがあります。おそらく、WrapPanel は間違ったコンテナーであり、私が持っているものを説明しているだけです。

すべてのアイテムの幅を同じにしたい。最小幅は120。あと、アイテムを伸ばして欲しい、そこがポイント。

WrapPanel の幅が 150 (最小値の 2 未満) の場合、列は 1 つになり、アイテムの幅は 150 になります。

WrapPanel 幅が 350 (3*最小値未満) の場合、2 つの列があり、アイテムの幅は 175 (350/2) になります。

WrapPanel の幅が 370 (最小値の 4 未満) の場合、3 つの列があり、アイテムの幅は 123 (370/3) になります。123 の 2 つのアイテムと 124 の 1 つのアイテムでもかまいません。

問題は、どうすればこの動作を取得できるかです。

4

1 に答える 1

4

C# コード:

public MainWindow()
{
    DataContext = this;
    SomeList.Add(new SomeType());
    SomeList.Add(new SomeType());
    SomeList.Add(new SomeType());
    SomeList.Add(new SomeType());
    SomeList.Add(new SomeType());
    InitializeComponent();
}
//SomeList Observable Collection
private ObservableCollection<SomeType> _someList =
    new ObservableCollection<SomeType>();
public ObservableCollection<SomeType> SomeList { get { return _someList; } }
private void UniformGrid_SizeChanged(object sender, SizeChangedEventArgs e)
{
    var grid = sender as UniformGrid;
    if (grid.ActualWidth > 370) grid.Columns = 3;
    else if (grid.ActualWidth > 150) grid.Columns = 2;
    else grid.Columns = 1;
}
public class SomeType : DependencyObject
{
    //Title Dependency Property
    public string Title
    {
        get { return (string)GetValue(TitleProperty); }
        set { SetValue(TitleProperty, value); }
    }
    public static readonly DependencyProperty TitleProperty =
        DependencyProperty.Register("Title", typeof(string), typeof(SomeType),
        new UIPropertyMetadata("unset yet"));
}

XAML コード:

<Window.Resources>
    <DataTemplate x:Key="SomeTemplate" DataType="{x:Type local:SomeType}">
        <Border BorderBrush="Black" BorderThickness="2" CornerRadius="4">
            <TextBlock Text="{Binding Title}"/>
        </Border>
    </DataTemplate>
</Window.Resources>
<ItemsControl
    ItemsSource="{Binding SomeList}"
    ItemTemplate="{StaticResource SomeTemplate}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid SizeChanged="UniformGrid_SizeChanged"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>
于 2012-10-29T19:35:12.853 に答える