내 패널은 UniformGrid와 유사한 작업을 시도하며 ItemContainerWidth (40.0) 및 ItemContainerHeight (20.0) 종속성 속성 외에도 ColumnNumber 속성이 있습니다.
내 패널의 크기를 내용에 맞게 조정하고 싶습니다.
내 MesureOverride :
protected override Size MeasureOverride(Size constraint)
{
if (constraint.Width == double.PositiveInfinity || constraint.Height == double.PositiveInfinity)
return Size.Empty;
for (int i = 0; i < InternalChildren.Count; i++)
{
InternalChildren[i].Measure(new Size(ItemContainerWidth, ItemContainerHeight));
}
return constraint;
}
내 ArrangeOverride :
protected override Size ArrangeOverride(Size finalSize)
{
int currentColumn = 0;
int currentRow = 0 ;
for (int i = 0; i < InternalChildren.Count; i++)
{
UIElement child = InternalChildren[i];
if (currentColumn == ColumnCount)
{
currentColumn = 0;
currentRow++;
}
currentColumn++;
double top = currentRow * ItemContainerHeight;
double left = currentColumn * ItemContainerWidth;
child.Arrange(new Rect(left, top, ItemContainerWidth, ItemContainerHeight));
}
return finalSize;
}
내 패널의 ActualWidth 및 Height Equal to finalSize, 패널의 크기가 MeasureOvride (constraint)에서 반환 된 크기가되기를 바랍니다.
강제로 내 패널이 화면에서 다르게 배치되면 내 패널의 크기를 WrapPanel 또는 StackPanel과 같은 콘텐츠로 지정하고 싶습니다.
finalSize로
테스트 목적으로 제약 크기 (100,100) 포함
내 패널 사용 : XAML :
<Grid>
<ItemsControl ItemsSource="{Binding Items, Mode=OneWay}" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<uni:ScrollableUniformGrid ColumnCount="12" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Black" BorderThickness="0,0,1,1">
<TextBlock Text="{Binding}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
처음 이해하지 못해서 미안 해요.
이것 좀보세요 :
<Grid>
<ItemsControl ItemsSource="{Binding}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<local:ScrollableUniformGrid HorizontalAlignment="Left" VerticalAlignment="Top" ColumnCount="3" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Black" BorderThickness="0,0,1,1">
<TextBlock Text="{Binding}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
이것이 ArrangeOverride의 모습입니다. MeasureOverride는 동일하게 유지 될 수 있습니다.
protected override Size ArrangeOverride(Size finalSize)
{
int currentColumn = 0;
int currentRow = 0;
for (int i = 0; i < InternalChildren.Count; i++)
{
UIElement child = InternalChildren[i];
double top = currentRow * ItemContainerHeight;
double left = currentColumn * ItemContainerWidth;
if (currentColumn == ColumnCount)
{
currentColumn = 0;
currentRow++;
}
else
{
currentColumn++;
}
child.Arrange(new Rect(left, top, ItemContainerWidth, ItemContainerHeight));
}
return new Size((ColumnCount + 1) * ItemContainerWidth, (currentRow + 1) * ItemContainerHeight);
}
이 사진을보세요. 패널은 저에게 맞는 콘텐츠입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다