在WPF中创建任意定位控件的集合

时间:2015-11-19 14:02:26

标签: c# wpf xaml controltemplate

我有一个简单的BorderGrid,位于WPF的Canvas容器中。控件的位置在运行时更改,因此它驻留在画布中。

控件的XAML看起来像这样:

<Border Name="PopupArea"
        Width="130"
        Height="150"
        BorderBrush="Black"
        BorderThickness="2"
        CornerRadius="5">
    <Border.Background>
        <SolidColorBrush Opacity="0.5" Color="Black" />
    </Border.Background>
    <Grid>
        <StackPanel>
            <Border HorizontalAlignment="Center">
                <Border.Effect>
                    <DropShadowEffect />
                </Border.Effect>
                <TextBlock FontWeight="Bold" Style="{StaticResource SmallWhiteFont}">HELLO WORLD</TextBlock>
            </Border>

        </StackPanel>

    </Grid>
</Border>

但是我现在需要能够在代码中创建运行时根据需要创建上述控件的Collection

我的问题是:

一个。编写我的XAML以通过代码创建上述控件的多个实例的最佳方法是什么?我只是在资源中声明ContentControl吗?

B中。假设我是正确的,并且需要资源模板。我如何实际使用它在代码中创建控件的多个实例?

1 个答案:

答案 0 :(得分:0)

在XAML中我会使用ItemTemplate。 然后我将ItemsSource绑定到我的viewmodel上的一些可观察集合。

以下是MSDN

的示例
<ListBox Width="400" Margin="10"
         ItemsSource="{Binding Source={StaticResource myTodoList}}">
   <ListBox.ItemTemplate>
     <DataTemplate>
       <StackPanel>
         <TextBlock Text="{Binding Path=TaskName}" />
         <TextBlock Text="{Binding Path=Description}"/>
         <TextBlock Text="{Binding Path=Priority}"/>
       </StackPanel>
     </DataTemplate>
   </ListBox.ItemTemplate>
 </ListBox>

注:

在资源部分定义DataTemplate更常见,因此它可以是可重用的对象。

<ListBox Width="400" Margin="10"
         ItemsSource="{Binding Source={StaticResource myTodoList}}"
         ItemTemplate="{StaticResource myTaskTemplate}"/>