Как создать вложенный объект - PullRequest
0 голосов
/ 30 ноября 2010

В начале я хотел бы сказать привет, так что ... Привет.Мне нужно создать структуру вложенных объектов.У меня есть объект (страница 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 будет известным значением (устанавливается при добавлении вложенного объекта), а содержимое каждого объекта будет объектом того же типа.Я понятия не имею, как начать.Пожалуйста, дайте мне подсказку, примеры.Спасибо.

Ответы [ 3 ]

0 голосов
/ 30 ноября 2010

Два возможных решения: пользовательский элемент управления или шаблон данных.Пользовательский элемент управления, вероятно, является самым простым, откуда вы сейчас находитесь, но шаблон данных может быть лучшим решением в долгосрочной перспективе.

Добавление пользовательского элемента управления в проект очень просто - Visual Studio имеетшаблон для этого.Вы можете просто поместить точно такой же Grid, который вы показали здесь, в свой ContentItem пользовательский элемент управления Xaml.И тогда вам просто нужно определить свойство с именем ButtonText в коде вашего пользовательского элемента управления.Это должно сделать это:

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

Это должно позволить вам использовать Xaml более или менее точно так, как вы показали.

Причина, по которой я предполагаю, что шаблон данных может быть лучше, заключается в том, чточто вы можете не захотеть жестко кодировать вложенную структуру в Xaml.Часто приятно иметь возможность генерировать такую ​​структуру из данных, а не вставлять ее в пользовательский интерфейс.Однако, если ваша структура полностью исправлена, подход, о котором вы просили, вероятно, будет в порядке.

0 голосов
/ 30 ноября 2010
0 голосов
/ 30 ноября 2010

вы хотели бы видеть HierarchicalDataTemplate в WPF

Смотрите здесь

...