1

私はWPFアプリケーションを開発しています。

ユーザーコントロールのリストを持っている

   <Grid >
        <ListView ItemsSource="{Binding MyList}"  HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" >
            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel Orientation="Vertical" ItemWidth="{Binding (ListView.View).ItemWidth, RelativeSource={RelativeSource AncestorType=ListView}}"
                   MinWidth="{Binding ItemWidth, RelativeSource={RelativeSource Self}}"
                   ItemHeight="{Binding (ListView.View).ItemHeight, RelativeSource={RelativeSource AncestorType=ListView}}"/>
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>
            <ListView.ItemTemplate >
                <DataTemplate >
                    <Views:MyUserControl Height="auto" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" SnapsToDevicePixels="True"/>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </Grid>

MyUserControl には、別のユーザー コントロールのリスト「DetailUserControl」があります。

<UserControl x:Class="MyUserControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300"  d:DesignWidth="300" >

<Grid >
    <Grid.RowDefinitions>
        <RowDefinition Height="45" />
        <RowDefinition  />
    </Grid.RowDefinitions>
    <Border Grid.RowSpan="2" >
        <StackPanel VerticalAlignment="Top" Orientation="Horizontal" HorizontalAlignment="Center" >
            <TextBlock  VerticalAlignment="Center" HorizontalAlignment="Center" Margin="10"   Text="{Binding Title}" />
        </StackPanel>
    </Border>
    <Border Grid.Row="1" Style="{StaticResource SummaryInnerFill}" >
        <ItemsControl ItemsSource="{Binding DetailUserControls}"  >
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>

        </ItemsControl>

    </Border>

</Grid>

ラップパネルを使用して、すべてのユーザーコントロールを左から右に順番に並べました。

レイアウトを最適化し、1 行目から可能な限り使用してから、2 行目に移動します。

ここに例があります(私の描画スキルで申し訳ありません:))

私は次のレイアウトを持っています:

ここに画像の説明を入力

タイル内の順序を変更すると、次のレイアウトを持つことができます (同じタイルが含まれていますが、スペースを無駄にせず、より整理されています)。

ここに画像の説明を入力

それを処理するために使用できるパネルはありますか?

4

1 に答える 1

0

Uniform Control Grid を利用できます。行と列のプロパティを指定できます。コントロールは、宣言された順序でグリッドに追加されます。その子コントロールは、行と列の表形式の構造に編成されます。Grid コントロールとは異なり、レイアウトを細かく制御することはできません。

例、

 <UniformGrid Name="uniformGrid1"
             Rows="2"
             Columns="3">
    <Button Content="blah"
             Margin="2" />
    <Button Content="blah1"
             Margin="2" />
    <Button Content="blah2"
            Margin="2" />
</UniformGrid>

均一グリッド

于 2013-07-09T22:32:24.943 に答える