WPF - How to stop ItemsControl pseudo-network columns from dancing / jumping during layout

A few other questions, on https://stackoverflow.com/a/3/9/11/11/11/11/11/11/, came to the same conclusion that I have - using ItemsControlc DataTemplatefor each element designed in such a way that positions such that they resemble a grid are much simpler (especially for formatting) than when using ListView.

The code resembles:

<StackPanel Grid.IsSharedSizeScope="True">
  <!-- Header -->
  <Grid>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="Auto" SharedSizeGroup="Column1" />
      <ColumnDefinition Width="Auto" SharedSizeGroup="Column2" />
    </Grid.ColumnDefinitions>
    <TextBlock Grid.Column="0" Text="Column Header 1" />
    <TextBlock Grid.Column="1" Text="Column Header 2" />
  </Grid>
  <!-- Items -->
  <ItemsControl ItemsSource="{Binding Path=Values, Mode=OneWay}">
    <ItemsControl.ItemTemplate>
      <DataTemplate>
        <Grid>
          <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" SharedSizeGroup="Column1" />
            <ColumnDefinition Width="Auto" SharedSizeGroup="Column2" />
          </Grid.ColumnDefinitions>
          <TextBlock Grid.Column="0" Text="{Binding ColumnProperty1}" />
          <TextBlock Grid.Column="1" Text="{Binding ColumnProperty2}" />
        </Grid>
      </DataTemplate>
    </ItemsControl.ItemTemplate>
  </ItemsControl>
</StackPanel>

The problem that I see is that whenever I exchange the object I'm attached to ItemsSource(this ObservableCollectionis that I am replacing the link, not clearing and re-adding), the whole grid 'dances for about a few seconds.

, , Auto -width .

, , . - ?

+5
4

, , .

, OP, , , . TextBox ( TextBlock) , , TextBox , , ... , - . 7 ItemsControl.

IsSharedSizeScope + ItemsControl , , Grid-, TextBox.

ListView , , "ItemsControl + GridViewRowPresenter", - .

, " DataGrid?": DataGrid . , , DataGrid Validation.Error. DataGridTextColumn, DataGridTemplateColumns ( , TextBox ), , , DataGrid. . ( : http://code.google.com/p/itraacv2-1/source/browse/trunk/scraps/tabSponsor%20-%20before%20deactive%20rewrite.xaml, ": "...)

. GridViewRowPresenter : http://code.google.com/p/itraacv2-1/source/browse/trunk/App/View/tabSponsor.xaml

+1

MinWidth .

. , , MinWidth . , , . , , .

IsSharedSizeScope , .

+1

, . , 20 1000 100 . . (200 ) , , .

0

, MinWidth, , . , . SharedSizeGroup, :

<Grid Grid.IsSharedSizeScope="True">
...
    <Grid Grid.Row="1">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" SharedSizeGroup="Group0"/>
            <ColumnDefinition Width="Auto" SharedSizeGroup="Group1"/>
            <ColumnDefinition Width="Auto" SharedSizeGroup="Group2"/>
            <ColumnDefinition Width="Auto" x:Name="Column3"/>
            <ColumnDefinition Width="Auto" x:Name="Column4"/>
            <ColumnDefinition Width="Auto" x:Name="Column5"/>
        </Grid.ColumnDefinitions>
    ...
    </Grid>

    <ItemsControl>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" SharedSizeGroup="Group0"/>
                        <ColumnDefinition Width="Auto" SharedSizeGroup="Group1"/>
                        <ColumnDefinition Width="Auto" SharedSizeGroup="Group2"/>
                        <ColumnDefinition Width="{Binding Path=ActualWidth, ElementName=Column3}"/>
                        <ColumnDefinition Width="{Binding Path=ActualWidth, ElementName=Column4}"/>
                        <ColumnDefinition Width="{Binding Path=ActualWidth, ElementName=Column5}"/>
                    </Grid.ColumnDefinitions>
                </Grid>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
...
</Grid>

I don’t know how many columns you can leave with SharedGroupSize and how many columns you need so you can play with the columns to see what works for you.

0
source

All Articles