Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何在Datatemplate中放置扩展器?_Wpf - Fatal编程技术网

Wpf 如何在Datatemplate中放置扩展器?

Wpf 如何在Datatemplate中放置扩展器?,wpf,Wpf,奇怪的一个 我在WPF表单上有一个contentcontrol,这将在其中加载一个datatemplate 这显示得很好(手写摘要代码,因此忽略错误/缺少属性): 然而,这将显示为空白 <DataTemplate> <Expander Header="Why dont I show"> <Label Content="Found datatemplate" /> </Expander> </DataTem

奇怪的一个

我在WPF表单上有一个contentcontrol,这将在其中加载一个datatemplate

这显示得很好(手写摘要代码,因此忽略错误/缺少属性):


然而,这将显示为空白

<DataTemplate>
    <Expander Header="Why dont I show">
        <Label Content="Found datatemplate" />
    </Expander> 
</DataTemplate>

我已经将扩展器设置为visibile,isexpanded设置为true等,无论它呈现什么都不会呈现


困惑-这是不可能的吗?

我最近做了一些类似于你所描述的事情,它对我起了作用。我有一个ItemsControl,它绑定到一组视图模型,每个视图模型都包含一个表示自定义内容的UserControl。我实现了ItemsControl.ItemTemplate,以便在扩展器中显示自定义控件,如下所示:

<ItemsControl Margin="0,20,0,0" ItemsSource="{Binding ControlItems}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Border Margin="0,0,0,0"
                    BorderBrush="#E7E7E7"
                    BorderThickness="0,1,0,0"
                    Padding="20,0">
                <Expander Foreground="#E7E7E7"
                          IsExpanded="{Binding Path=IsExpanded,
                                        Mode=TwoWay}">
                    <Expander.Header>
                        <Grid>
                            <TextBlock HorizontalAlignment="Left"
                                       VerticalAlignment="Center"
                                       FontSize="24"
                                       Text="{Binding Title}" />
                        </Grid>
                    </Expander.Header>
                    <DockPanel>
                        <ScrollViewer MinHeight="250">
                            <ContentControl Content="{Binding Control}" />
                        </ScrollViewer>
                    </DockPanel>
                </Expander>
            </Border>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

这应该行得通,也许发布真实代码而不是近似值?魔鬼总是在那些我们懒得提及的小细节中。我隐约记得内容绑定需要传递给孩子们。你能试试亨克吗?他会玩得更多,因为匿名需要很长时间。我已经在空白表格中试过了,而且效果很好。我的是一个用户控件,模板也可以按类型切换,其他内容可以正常工作,只是扩展器不会显示。grrrr!!奎师那-提出了一个“内容设置不止一次”的错误,我们用空白的形式尝试了它,它成功了这就是我的意思。不断开发那个空白应用程序,直到你能重现问题。我们不太可能找到答案。
<ItemsControl Margin="0,20,0,0" ItemsSource="{Binding ControlItems}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Border Margin="0,0,0,0"
                    BorderBrush="#E7E7E7"
                    BorderThickness="0,1,0,0"
                    Padding="20,0">
                <Expander Foreground="#E7E7E7"
                          IsExpanded="{Binding Path=IsExpanded,
                                        Mode=TwoWay}">
                    <Expander.Header>
                        <Grid>
                            <TextBlock HorizontalAlignment="Left"
                                       VerticalAlignment="Center"
                                       FontSize="24"
                                       Text="{Binding Title}" />
                        </Grid>
                    </Expander.Header>
                    <DockPanel>
                        <ScrollViewer MinHeight="250">
                            <ContentControl Content="{Binding Control}" />
                        </ScrollViewer>
                    </DockPanel>
                </Expander>
            </Border>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
public class SidePanelControlItem : ModelBase
{
    private bool _isExpanded;

    public SidePanelControlItem(UserControl control)
    {
        if (control == null) { throw new ArgumentNullException("control");}

        Control = control;
    }

    public string Title { get; set; }
    public UserControl Control { get; private set; }

    public bool IsExpanded
    {
        get { return _isExpanded; }
        set
        {
            _isExpanded = value; 
            OnPropertyChanged("IsExpanded");
        }
    }
}