Code Behind中使用的控制模板动态添加到StackPanel

时间:2015-11-16 09:44:19

标签: c# wpf xaml

我的/Themes/Generic.xaml中有以下ControlTemplate:

<ControlTemplate x:Key="GroupList" TargetType="{x:Type Expander}">
        <Expander IsExpanded="True">
            <Expander.Header>
                <Label Style="{DynamicResource headline3}" FontWeight="Light" BorderThickness="0 0 0 1">TEst group</Label>
            </Expander.Header>
            <ListBox x:Name="lstBoxContacts" Height="auto" BorderThickness="0" VerticalAlignment="Top" AllowDrop="True" PreviewDragOver="lstBoxContacts_PreviewDragOver"  Drop="lstBoxContacts_Drop" ItemsSource="{Binding Contacts}">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Label Content="{Binding Fullname}" />
                    </DataTemplate>
                </ListBox.ItemTemplate>

                <ListBox.ContextMenu>
                    <ContextMenu >
                        <MenuItem Header="Send Message" Command="local:CustomCommands.cmdMessageWrite"/>
                        <MenuItem Header="Show Details" Command="local:CustomCommands.cmdContactDetails"/>
                        <MenuItem Header="Delete" Command="local:CustomCommands.cmdContactDelete"/>
                    </ContextMenu>
                </ListBox.ContextMenu>
            </ListBox>
        </Expander>
    </ControlTemplate>

这应该给我一个扩展器,里面有一个Listbox。我可以传递ObservableCollection<User>对象,而不是显示(仅用户的Fullname属性)。

在我的MainWindow.xaml中,我有一个名为“stkpContactsAndGroups”的Stackpanel,我想以编程方式动态添加Expanders。

内容来自API调用(一切正常)。

从我所见,我应该使用Template.FindName。但是,当我提供可以找到所述模板的原点时,VS就是我。

Expander grp = (Expander)Template.FindName("GroupList", new Generic());
stkpContactsAndGroups.Children.Add(grp);

它无法将Generic()转换为FrameworkElement。我错过了这里的观点吗?

1 个答案:

答案 0 :(得分:-1)

如果将此模板应用于模板化父级,

FrameworkTemplate.FindName方法可帮助您在模板中查找元素。在你的情况下,你最好使用Application.FindResource方法,创建新的Expander,使用Expander.Template属性应用模板,然后将此扩展器添加到StackPanel.Children集合