2009-06-10 43 views
6

Tôi có một itemscontrol với một bảng điều khiển tùy chỉnh bên trong một usercontrol. Kích thước usercontrols chỉ bị giới hạn bởi kích thước cửa sổ cha.WPF - Biên giới xung quanh một itemscontrol

<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> 

Bây giờ tôi muốn viền chỉ được vẽ xung quanh bảng kết quả. Nhưng thay vào đó nó được vẽ xung quanh toàn bộ lưới hoặc có lẽ chính xác hơn ở cùng kích thước với lưới.

Tôi nghĩ rằng tôi đã triển khai MeasureOverride chính xác trên HexagonalPanel của mình, nó trả về kích thước chính xác, vì vậy không nên vẽ đường viền ở kích thước đó?

Tôi đang thiếu gì?

Cảm ơn

Trả lời

5

Bạn chưa đặt kích thước trên ItemsControl, vì vậy nó sẽ được định kích thước cho cha mẹ của nó. Thử thiết lập HorizontalAlignment và VerticalAlignment của ItemsControl thành Center; điều đó sẽ làm cho kích thước thực tế của ItemsControl khớp với nội dung của nó.

+0

nhờ nó làm việc tôi vẫn phải học! rất nhiều về hệ thống bố trí WPF – eric

+0

Tôi nghe ya. Phải mất một số nhận được sử dụng để. –

2

ItemsControl có thuộc tính BorderBrush và BorderThickness. Bạn có thể muốn sử dụng chúng vì ItemsControl có một Border trong ControlTemplate của nó theo mặc định.

+0

nope tiếc là kết quả tương tự của nó :-( – eric

+0

Cảm ơn, mà làm việc cho tôi –

0

bạn có thể đạt được điều này, việc tính toán và cập nhật giá trị kích thước mới:

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); 
} 
} 
Các vấn đề liên quan