2009-06-10 30 views
6

Tengo un control de elementos con un panel personalizado dentro de un control de usuario. El tamaño de los controles de usuario solo está limitado por el tamaño de la ventana primaria.WPF - Borde alrededor de un control de elementos

<UserControl> 
    <Grid> 
    <Border BorderBrush="DarkGray" BorderThickness="5"> 
     <ItemsControl ItemsSource="{Binding ActiveGame.Grid.CellsFlat}"> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
      <Wpf:HexagonalPanel/> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
      <Button /> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </Border> 
    </Grid> 
</UserControl> 

Ahora quiero que el borde se dibuje solo alrededor del panel resultante. Pero en su lugar se dibuja alrededor de toda la cuadrícula o probablemente más precisamente al mismo tamaño que la cuadrícula.

Creo que implementé el MeasureOverride correctamente en mi HexagonalPanel, devuelve el tamaño correcto, por lo que no debería dibujar el borde en ese tamaño?

¿Qué me estoy perdiendo?

Gracias

Respuesta

5

No ha establecido un tamaño en ItemsControl, por lo que también se ajustará a su elemento principal. Intente configurar la Alineación Horizontal de ItemsControl y la Alineación Vertical con el Centro; eso hará que el tamaño real de ItemsControl coincida con el de su contenido.

+0

gracias funcionó todavía tengo que aprender! mucho sobre el sistema de diseño de WPF – eric

+0

Te escucho. Me toma un tiempo acostumbrarme. –

2

sí ItemsControl tiene BorderBrush y BorderThickness propiedades. Probablemente desee utilizarlos, ya que ItemsControl tiene un borde en su ControlTemplate de forma predeterminada.

+0

nop por desgracia es el mismo resultado :-(Gracias – eric

+0

, que trabajó para mí –

0

se puede achive esto, el cálculo y actualización de valor nuevo tamaño:

public class MyPanel : Panel{ 
protected override Size ArrangeOverride(Size finalSize){ 

// calculate new size 
........ 

this.SetValue(WidthProperty, totalwidth); 
    this.SetValue(HeightProperty, totalheight); 

return new Size(totalwidth, totalheight); 
} 
} 
Cuestiones relacionadas