كيفية وضع حدود حول البنودكونترول؟
-
13-09-2019 - |
سؤال
لدي بنود مع لوحة مخصصة داخل UserControl. حجم UserControls مقيد فقط بحجم النافذة الأصل.
<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، فهو بإرجاع الحجم الصحيح، لذلك لا ينبغي أن يرسم الحدود في هذا الحجم؟
ماذا ينقصني؟
المحلول
أنت لم تحدد حجم على 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);
}
}