سؤال

لدي بنود مع لوحة مخصصة داخل 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, ، لذلك سيتم حجمه إلى والدها أيضا. حاول تحديد ItemsControlHorizontalAlignment و 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);
}
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top