是否有可用于在行和列布局之间动态切换的WPF布局控件?

时间:2016-12-19 09:19:32

标签: c# wpf xaml

我原本被要求制作一个控制器,其儿童控件垂直堆叠,并且可以装入放置它们的容器中,但是在看到这个设计之后我被要求让它们水平堆叠,如果纵横比是又长又瘦。像下图这样的东西;

Correct layout - all space is filled

我尝试了各种不同的容器,但从来没有完全得到我想要的东西。我得到的最接近的是使用一个包装面板,问题是控件的三个不同部分不会伸展以适应父容器。我得到的效果更接近于此;

The closest I got

我用这样的东西得到了这个。

    <WrapPanel>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <Textbox/>
        </Grid>

        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <Textbox/>
        </Grid>

        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <Textbox/>
        </Grid>
    </WrapPanel>

正如您所看到的,我无法获得控件来填充容器。有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:0)

看看这个基本的wpf容器: http://www.dotnetfunda.com/articles/show/900/wpf-tutorial-layout-panels-containers-layout-transformation-2

您可以使用UniformGrid,并将Rows1属性设置为<UniformGrid x:Name="uniformGrid" Columns="1"> <Border Background="Red" /> <Border Background="Green" /> <Border Background="Blue" /> </UniformGrid> <UniformGrid x:Name="uniformGrid" Rows="1"> <Border Background="Red" /> <Border Background="Green" /> <Border Background="Blue" /> </UniformGrid>

0

要切换方向,只需将其中一个属性重置为1,将另一个属性设置为if (uniformGrid.Rows == 0) { uniformGrid.Rows = 1; uniformGrid.Columns = 0; } else { uniformGrid.Rows = 0; uniformGrid.Columns = 1; }

public ActionResult SyncfusionChart()
        {
    List<ChartData> data = new List<ChartData>();
                data.Add(new ChartData("Jan", 35, 1));
                data.Add(new ChartData("Feb", 28, 2));
                data.Add(new ChartData("Mar", 34, 3));
                data.Add(new ChartData("Apr", 32, 4));
                data.Add(new ChartData("May", 40, 5));
                data.Add(new ChartData("Jun", 32, 6));
                data.Add(new ChartData("Jul", 35, 7));
                data.Add(new ChartData("Aug", 55, 8));
                data.Add(new ChartData("Sep", 38, 9));
                data.Add(new ChartData("Oct", 30, 10));
                data.Add(new ChartData("Nov", 25, 11));
                data.Add(new ChartData("Dec", 32, 12));
}
    public class ChartData
        {
            public string Month;
            public double Sales;
            public int id;
            public ChartData(string month, double sales, int id)
            {
                this.Month = month;
                this.Sales = sales;
                this.id = id;
            }
        }