tags:

views:

2110

answers:

4

Hi,

I have a listbox with the ItemsPanelTemplate set to UniformGrid rows= 6 cols= 7.

I want the listbox items to fill ther space.

I am using a datatemplete defined in a dictionary.

The outer control of my template is a Border with HorizontalAlignment=Stretch and VerticalAlignent=Strectch but the templates do not fill the listbox items space?

Any ideas? Malcolm

+2  A: 

EDITED: Added additional information, and replied to question.

An interesting way to make ListBoxItems be uniform with other items is to the Grids shared scope feature in your DataTemplate

Example:

<ItemsControl Grid.IsSharedScopeSize="True" ItemsSource="{Binding Path=Items}">
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <StackPanel Orientation="Horizontal">
        <Grid>
          <Grid.ColumnDefinitions>
            <ColumnDefinition SharedSizeGroup="Content"/>
          </Grid.ColumnDefinitions>
          <TextBlock Grid.Column="1" Text="{Binding Path=Name}">
        </Grid>
      </StackPanel>
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>

Now all the TextBlocks will be the same size in your layout. The child item should fill all available space if no specific width/height are set.

Alternatively you can set the Width and Height of the control to stretched, however I think using the Grid.SharedScopeSize is a more elegant way to achieving the same effect.

Dennis Roche
A: 

Yes the same size but do they fill the space available FULLY????

Malcolm
A: 

its not filling the available space!

Malcolm
+2  A: 

The answer to this to set HorizontalContentAligment and VerticalContentAlignment to Stretch on the LISTBOX not the datatemplate.

Malcolm