如何将Expander放在Datatemplate中?

时间:2015-06-25 16:12:13

标签: wpf

奇怪的一个。

我在WPF表单上有一个contentcontrol,它会在其中加载一个datatemplate。

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

 <DataTemplate>
           <Label Content="Found datatemplate" />
  </DataTemplate>

但这会呈现空白

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

我已将扩展器设置为visibile,isexpanded为true等等,无论它根本不渲染。

困惑 - 这是不可能的吗?

1 个答案:

答案 0 :(得分:0)

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

<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");
        }
    }
}