WrapPanel WPF中的StackPanels

时间:2018-12-07 12:21:37

标签: c# .net wpf

enter image description here

目标是创建这样的布局。

我来自iOS开发,是WPF开发的新手,所以我的想法是将StackViews的CollectionViews与iOS的4种多媒体元素结合起来,但是我知道WPF的工作原理与iOS截然不同。因此,我将在WPF中使用StackPanels和WrapPanels,如果我的解决方案不正确,请给我一个更好的解决方案。

<Window x:Class="WPF_MultiViewer.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WPF_MultiViewer"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <WrapPanel>
            <StackPanel x:Name="MyStackPanel">
                <StackPanel Orientation="Horizontal">
                    <Button Height="100" Width="80">Button1</Button>
                    <Button Height="100" Width="80">Button2</Button>
                </StackPanel>

                <StackPanel Orientation="Horizontal">
                    <Button Height="100" Width="80">Button1</Button>
                    <Button Height="100" Width="80">Button2</Button>
                </StackPanel>
            </StackPanel>
        </WrapPanel>
    </Grid>
</Window>

结果是这个 enter image description here

我知道,如果我将其进行硬编码并复制粘贴12次,它将起作用,但是问题是我想创建一个模板,然后动态创建它,例如在一列中动态创建12次4栈面板。为了轻松地控制和维护它,如何在WPF中实现?

2 个答案:

答案 0 :(得分:2)

为您提供一个使用示例:

import createMap from 'ol-mapbox-style';

createMap('map', 'https://api.mapbox.com/styles/v1/itatters/cjo09902ya4z92speha95h57d.html?fresh=true&title=true&access_token=API-KEY-HERE#16.0/45.505643/-73.576557/305')
.then(function(map) {
  // map is an ol/Map instance with the layers from the Mapbox style object
});

答案 1 :(得分:1)

在WPF中,您可以使用MVVM(模型-视图-视图模型)模式。如果要动态创建元素,则还可以在wpf中使用一个名为“ Prism”的库。 这里 https://www.c-sharpcorner.com/article/how-to-add-the-dynamic-control-in-to-the-view-from-view-mode/ 是一个小教程,您如何在运行时创建元素。

根据您的要求,我将使用网格,并且ViewModel可以为定义的行和列动态创建元素。