wpf方形可调整大小的网格

时间:2016-02-03 08:19:55

标签: c# wpf

我正在尝试创建一个由Grid ScrollViewer组成的照片库组件。它应该可以调整大小,但是照片单元格必须保持正方形,垂直间隙应该与水平尺寸相同。所以我试图将行大小绑定到列'实际尺寸:

<ScrollViewer>
        <Grid ShowGridLines="True">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Name="column" Width="216*"/>
                <ColumnDefinition Name="gap" Width="4*"/>
                <ColumnDefinition Width="216*"/>
                <ColumnDefinition Width="4*"/>
                <ColumnDefinition Width="216*"/>
                <ColumnDefinition Width="4*"/>
                <ColumnDefinition Width="216*"/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="{Binding ElementName=column, Path=ActualWidth}"/>
                <RowDefinition Height="{Binding ElementName=gap, Path=ActualWidth}"/>
                <RowDefinition Height="{Binding ElementName=column, Path=ActualWidth}"/>
                <RowDefinition Height="{Binding ElementName=gap, Path=ActualWidth}"/>
                <RowDefinition Height="{Binding ElementName=column, Path=ActualWidth}"/>
                <RowDefinition Height="{Binding ElementName=gap, Path=ActualWidth}"/>
                <RowDefinition Height="{Binding ElementName=column, Path=ActualWidth}"/>
        </Grid>
    </ScrollViewer>

但结果网格看起来像Grid Grid

我做错了什么?我该怎么办才能让细胞始终保持正方形?

1 个答案:

答案 0 :(得分:0)

我认为网格不是很好的控制,因为如果你写照片库组件,你需要在调整大小后包装项目。

最好的方法是使用自定义样式的ListBox(使用WrapPanel作为ItemsHost元素)。 列表框:

 <ListBox 
      Style="{StaticResource PhotoListStyle}"  
      SelectionMode="Extended" 
      ItemsSource="{Binding}" 
 </ListBox>

自定义样式:

 <Style TargetType="{x:Type ListBox}" x:Key="PhotoListStyle">
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="{x:Type ListBox}" >
            <WrapPanel Margin="5" IsItemsHost="True" Orientation="Horizontal" 
                       ItemHeight="{Binding ElementName=32}" 
                       ItemWidth="{Binding ElementName=32" 
                       VerticalAlignment="Top" HorizontalAlignment="Stretch" />
          </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

英语不是我的母语