WPF:创建可在多个视图中使用的控件的最佳方法

时间:2018-05-02 14:17:02

标签: wpf wpf-controls

我有5个网页都有这种网格结构:

<Grid>
<Grid.ColumnDefinitions>
    <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
    <RowDefinition Height="Auto" />
    <RowDefinition Height="*" />
    <RowDefinition Height="Auto" />
</Grid.RowDefinitions>

<Grid Grid.Row="0">
    <!-- TOP CONTENT HERE -->
</Grid>

<Grid Grid.Row="1">
    <!-- MIDDLE CONTENT HERE -->
</Grid>

<Grid Grid.Row="2">
    <!-- BOTTOM CONTENT HERE -->
</Grid>

现在显然这只是针对这个问题进行了简化 - 但我想避免的是,在每个视图中都要使用完全相同的Grid布局和所有样式等。

问题是,我怎样才能以最简单的方式创建一个控件,View1,View2..ViewN可以添加到他们的xaml并指定他们认为合适的TOP,MIDDLE和BOTTOM内容?

1 个答案:

答案 0 :(得分:1)

这个简单的派生网格会根据需要自动排列三个子元素:

public class AutoGrid : Grid
{
    public AutoGrid()
    {
        RowDefinitions.Add(new RowDefinition { Height = new GridLength(0, GridUnitType.Auto) });
        RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });
        RowDefinitions.Add(new RowDefinition { Height = new GridLength(0, GridUnitType.Auto) });
    }

    protected override Size MeasureOverride(Size constraint)
    {
        for (int i = 0; i < Children.Count; i++)
        {
            SetRow(Children[i], i);
        }

        return base.MeasureOverride(constraint);
    }
}