2009-06-10 58 views
6

我有一個用戶控件內的自定義面板的itemscontrol。 usercontrols的大小隻受到父窗口大小的限制。WPF - 項目控件周圍的邊框

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

我現在想要只在最終面板周圍繪製邊框。但是相反,它是圍繞整個網格繪製的,或者可能更精確地與網格大小相同。

我想我在我的HexagonalPanel上正確地實現了MeasureOverride,它返回正確的大小,所以不應該在該大小繪製邊界?

我錯過了什麼?

謝謝

回答

5

您還沒有在ItemsControl上設置尺寸,所以它的尺寸也會根據它的父項設置。嘗試將ItemsControl的Horizo​​ntalAlignment和VerticalAlignment設置爲居中;這將使ItemsControl的實際大小與其內容匹配。

2

ItemsControl本身具有BorderBrush和BorderThickness屬性。你可能想要使用它們,因爲默認情況下,ItemsControl的ControlTemplate中有一個邊框。

+0

沒了遺憾的是其同樣的結果:-( – eric 2009-06-10 16:24:21

+0

謝謝,這爲我工作 – 2017-08-09 11:06:29

0

就可以實現這一目標,計算和更新新的大小值:

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); 
} 
}