Winui3 动态添加控件

如何在Winui3中动态添加控件?

假设我有一个StackPanel,我现在需要用数据绑定为它绑定一个控件集合,我改如何做到?


"Panel" />
public UIElementCollection Views
    {
        ...
        get => _views;
    }

我尝试过绑定到Children属性中,但行不通

更多信息你可以搜索“ItemsControl 类” 在官方文档也有实现示例,应该是你想要的。
在WinUI 3中,可以使用 ItemsControl 来动态添加控件。可以将 ItemsControl 绑定到一个数据源,然后使用 ItemsTemplate 来指定每个数据项对应的控件。

首先,需要定义一个数据源,如下:

public ObservableCollection<ViewModel> Views { get; set; } = new ObservableCollection<ViewModel>();

然后,将 ItemsControl 绑定到数据源:

<ItemsControl x:Name="itemsControl" ItemsSource="{x:Bind Views}" />

接着,定义模板来指定每个数据项对应的控件:

<ItemsControl.ItemTemplate>
    <DataTemplate x:DataType="viewmodel:ViewModel">
        <StackPanel>
            <TextBlock Text="{x:Bind Name}" />
            <!-- 可以添加其他控件 -->
        </StackPanel>
    </DataTemplate>
</ItemsControl.ItemTemplate>

最后, 可以在代码中动态地添加或删除项,如

Views.Add(new ViewModel {Name = "View 1"});

此例中, x:Bind 和 x:DataType 是特定于WinUI 3.0的功能.

可以在c#中实现:

{
    Button btn = new Button();
    btn.text //定义一些东西....
}
//可以是在某一事件触发