Data binding XAML模板水平绑定

Data binding XAML模板水平绑定,data-binding,xaml,templates,Data Binding,Xaml,Templates,我想知道如何使用模板数据绑定来完成以下代码生成的内容(带有一些相关文本的复选框网格): int-tbIndex=0; 对于(int i=1;i

我想知道如何使用模板数据绑定来完成以下代码生成的内容(带有一些相关文本的复选框网格):

int-tbIndex=0;
对于(int i=1;i<5;i++){
StackPanel pan=新的StackPanel();
平移方向=方向水平;
盘边缘=新厚度(3);
pan.Name=“RowPanel”+i;
对于(int j=0;j<3;j++){
复选框cb=新复选框();
TextBlock=新的TextBlock();
块宽度=75;
block.Text=“Item”+(++tbIndex.ToString();
pan.Children.Add(cb);
平移。儿童。添加(块);
}
ContentPanel.Children.Add(pan);
}
例如,在ASP.NET中,可以使用数据列表并将重复方向设置为水平和绑定。是否有一种更具声明性、更不必要的等效方法(即使用模板和通用“数据绑定”工具提前完成)?


这假设在名为
YourListOfItems
的属性中有一个对象集合。在这些对象中,它假设存在名为“YourIsChecked”(
bool
)和“YourText”(可能是
string
)的属性。

有一个换行面板

这是它的一部分


作为一个开源项目,你可以了解它是如何实现的,并为WPF创建类似的东西,我不敢相信,似乎还没有人将这个工具包移植到完整的WPF中。

AnthonyWJones说得对,Wrap面板是一个很好的方法,但Kent在演示如何使用ItemSource时遇到了麻烦(尽管StackPanel没有达到目标)。因此,我将发布代码,演示声明性等价物:

<ItemsControl x:Name="myItems" Width="300">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <controls:WrapPanel x:Name="itemsWrapPanel" Margin="0" Orientation="Horizontal" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal" Width="100">
                <CheckBox IsChecked="{Binding MyCheckedProperty, Mode=TwoWay}" x:Name="IsSelectedCheckBox" Height="25"></CheckBox>
                <TextBlock Height="12" Text="{Binding MyTextProperty}" Margin="0" />
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>


一个小问题是DataTemplate需要一个单独的子对象,因此使用水平方向的StackPanel可以保持内容的流动。

当它到达容器的右边框时,是否会进行包装?我不确定包装会如何影响这个问题。如果需要包装内容,请使用适当的容器。StackPanel不是最佳选择适合包装的容器。@Kent-谢谢,但这是我开始的,AnthonyWJones说它没有包装是对的。我想我将从Silverlight toolkit包装面板开始。正如我所说的-StackPanel不会包装。改用网格并使用共享大小组。完整的WPF实现已经有包装面板。Silverlight没有因此他们将其添加到Silverlight工具包中。DockPanel也是如此。
<ItemsControl ItemsSource="{Binding YourListOfItems}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <CheckBox IsChecked="{Binding YourIsChecked}"/>
                <TextBlock Text="{Binding YourText}"/>
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
<ItemsControl x:Name="myItems" Width="300">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <controls:WrapPanel x:Name="itemsWrapPanel" Margin="0" Orientation="Horizontal" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal" Width="100">
                <CheckBox IsChecked="{Binding MyCheckedProperty, Mode=TwoWay}" x:Name="IsSelectedCheckBox" Height="25"></CheckBox>
                <TextBlock Height="12" Text="{Binding MyTextProperty}" Margin="0" />
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>