<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。谢谢。
答案 0 :(得分:0)
您希望在WPF中看到HierarchicalDataTemplate
答案 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)