如何创建可嵌套对象

时间:2010-11-30 10:45:15

标签: c# xaml silverlight-4.0 wpf-controls

在开始的时候我想打招呼,所以......你好。我需要创建一个嵌套的对象结构。 我有一个像这样的对象(xaml页面)

<navigation:Page x:Class="ItemTemplateExample.ContentItem" 
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
       xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
       xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
       mc:Ignorable="d"
       xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
       d:DesignWidth="200" d:DesignHeight="20"
       Title="ContentItem Page">
<Grid x:Name="LayoutRoot">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="50"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Button x:Name="button1" />
    <ContentControl  Grid.Column="1" x:Name="content1" />
</Grid>

现在我想在嵌套结构中使用它。例如

<local:ContentItem ButtonText="level 1">
     <local:ContentItem ButtonText="level 2" />
     <local:ContentItem ButtonText="level 2" />
     <local:ContentItem ButtonText="level 2">
          <local:ContentItem ButtonText="level 3" />    
     </local:ContentItem>
</local:ContentItem>

其中ButtonText将是已知值(在添加嵌套对象时设置),每个对象的内容将是相同类型的对象。我不知道如何开始。请给我一些提示,exmaples。谢谢。

3 个答案:

答案 0 :(得分:0)

您希望在WPF中看到HierarchicalDataTemplate

Seee here

答案 1 :(得分:0)

两种可能的解决方案:用户控件或数据模板。用户控件可能是您现在最容易到达的地方,但从长远来看,数据模板可能是更好的解决方案。

向项目添加用户控件很简单 - Visual Studio有一个模板。您可以在Grid用户控件的Xaml中放置与此处显示的完全相同的ContentItem。然后你只需要在用户控件的代码隐藏中定义一个名为ButtonText的属性。这应该这样做:

public string ButtonText
{
    get { return button1.Content.ToString(); }
    set { button1.Content = value; }
}

这应该让你或多或少地像你所展示的那样使用Xaml。

我建议数据模板可能更好的原因是您可能不想在Xaml中对嵌套结构进行硬编码。能够从数据生成这样的结构而不是将其烘焙到UI中通常很好。但是,如果您的结构已完全修复,那么您所要求的方法可能就行了。

答案 2 :(得分:0)