Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置项控件子项的宽度和高度_C#_Uwp_Uwp Xaml - Fatal编程技术网

C# 设置项控件子项的宽度和高度

C# 设置项控件子项的宽度和高度,c#,uwp,uwp-xaml,C#,Uwp,Uwp Xaml,我的CustomItemsControl如下所示: <local:CustomItemsControl x:Name="CustomItemsControl" > <local:CustomItemsControl.ItemTemplate> <DataTemplate> <Border x:Name="rectangle" Background="Orange" Corner

我的CustomItemsControl如下所示:

   <local:CustomItemsControl x:Name="CustomItemsControl" >
        <local:CustomItemsControl.ItemTemplate>
            <DataTemplate>
                <Border x:Name="rectangle" Background="Orange" CornerRadius="5"  />
            </DataTemplate>
        </local:CustomItemsControl.ItemTemplate>
    </local:CustomItemsControl>

除非您设置边框的宽度和高度(例如10),否则不会显示项目。我尝试实现CustomItemsControl计算项目的宽度和高度。我做错了什么?如何完成我的计划?

您应该使用覆盖的
测量覆盖
排列覆盖
方法编写一个适当的自定义
面板
,并将其分配给Items控件的
ItemsPanel
属性:

<ItemsControl>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <local:CustomPanel />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Border ... />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

谢谢我如何将项目垂直定位?使用上述解决方案,它们将垂直显示。是否需要在两个方向之间切换?是。顺便说一句,这是我自己想出来的。我改变了
var cellWidth=size.Height/Children.Count
childRect.Y+=cellWidth:)好的,像StackPanel一样添加方向属性。还要注意,编辑的代码示例现在返回排列的子元素的实际大小,而不是
finalSize
。您还必须修改代码以适应不同的方向。还有一个问题。当我在ItemsControl周围添加Stackpanel或Grid时,
不会显示任何内容,因为
availableSize.Height
设置为
0
。我怎样才能解决这个问题?
<ItemsControl>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <local:CustomPanel />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Border ... />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
public class CustomPanel : Panel
{
    protected override Size MeasureOverride(Size availableSize)
    {
        var size = new Size();

        if (double.IsInfinity(availableSize.Width)) // availableSize may be infinite
        {
            availableSize.Width = RenderSize.Width;
        }

        if (Children.Count > 0)
        {
            var cellWidth = availableSize.Width / Children.Count;
            var childSize = new Size(cellWidth, cellWidth);

            foreach (var child in Children)
            {
                child.Measure(childSize);
            }

            size.Width = availableSize.Width;
            size.Height = cellWidth;
        }

        return size;
    }

    protected override Size ArrangeOverride(Size finalSize)
    {
        var size = new Size();

        if (Children.Count > 0)
        {
            var cellWidth = finalSize.Width / Children.Count;
            var childRect = new Rect(0, 0, cellWidth, cellWidth);

            foreach (var child in Children)
            {
                child.Arrange(childRect);
                childRect.X += cellWidth;
            }

            size.Width = finalSize.Width;
            size.Height = cellWidth;
        }

        return size;
    }
}