WPF: динамическая форма, выровненная по <Grid> - PullRequest
0 голосов
/ 28 октября 2009

Я создаю графический интерфейс для редактирования различных файлов конфигурации XML в зависимости от того, какие значения разрешены их схемой. Мне нужен способ для отображения метки для каждого поля в левом столбце, в то время как отображение элемента управления для редактирования этого поля в правом столбце. Если бы этот список полей не был динамическим, я бы просто отобразил их в таблице с двумя столбцами. Но это не так просто с динамическим списком полей.

В приведенном ниже примере показано, что я хотел бы сделать, но поскольку DataTemplate может содержать только одного дочернего элемента, этот способ не будет работать. Кто-нибудь знает хороший обходной путь, который бы правильно создавал этот динамический макет формы?

(Чтобы упростить пример, я использую унифицированную сетку. Я, вероятно, предпочел бы подход, который удаляет сетку в ControlTemplate (чтобы вы могли определить столбцы / строки) - но я подумал, что этот подход получил указать поперек)

        <ItemsControl x:Name="FieldItemsCtrl">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <UniformGrid Columns="2" />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate DataType="{x:Type local:EditableField}">
                    <TextBlock Text="{Binding FieldName}" Foreground="{DynamicResource TextBrush}" />
                    <TextBox Text="{Binding FieldValue}" />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>

Спасибо!

1 Ответ

0 голосов
/ 28 октября 2009

Вы можете заменить то, что вам нужно от панели с DataTemplate. Проверьте это:

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:System="clr-namespace:System;assembly=mscorlib" >
  <Grid>  
    <ItemsControl>
      <ItemsControl.ItemTemplate>
        <DataTemplate>
          <Grid>
            <Grid.ColumnDefinitions>
              <ColumnDefinition Width="*"/>
              <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <TextBlock Text="FieldName" Grid.Column="0"  HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0, 0, 14, 0" />
            <TextBox Text="FieldValue" Grid.Column="1" />
          </Grid>
        </DataTemplate>
      </ItemsControl.ItemTemplate>
     <System:String>Hello</System:String>
     <System:String>World</System:String>
    </ItemsControl>
  </Grid>
</Page>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...