ItemsControlの周囲に境界線を配置する方法は?
-
13-09-2019 - |
質問
私は、ユーザーコントロール内のカスタムパネルとの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>
私は今、国境だけで結果パネルの周りに描くことにしたいです。 しかし、その代わりにそのグリッドと同じサイズで、グリッド全体またはおそらくより正確に周りに描かます。
私は、私は私のHexagonalPanelに正しくMeasureOverrideを実装し、それが正しいサイズを返すので、それはそのサイズで境界線を引くべきではないと思いますか?
私は何をしないのですか?
解決
あなたはItemsControl
上のサイズを設定していないので、それはあまりにもその親にサイズ設定されます。 ItemsControl
にHorizontalAlignment
のVerticalAlignment
とCenter
を設定してみてください。それはItemsControl
の実際のサイズは、その内容のものと一致ようになります。
他のヒント
ItemsControl
自体はBorderBrush
とBorderThickness
特性を有しています。 ItemsControl
は、デフォルトでそのBorder
でControlTemplate
を持っているので、おそらくそれらを使用することにしたい。
あなたが計算し、新しいサイズの値を更新し、これを達成することができます:
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);
}
}
所属していません StackOverflow