Как делают меня расположение форма в WPF использование сетки или других средств управления для пригодности для обслуживания

У меня есть форма WPF, я хочу разметить стандартную форму на нее. Каждый элемент формы будет иметь маркировку и затем управление. Довольно стандартный материал.

Если я использую панель переноса, она может заставить маркировку и управление быть разделенной, но я хочу, чтобы они остались вместе. Есть ли некоторый эквивалент WPF <nobr/>?

Работы сетки, и позволяют, чтобы столбец охватил и т.д., однако я действительно действительно ненавижу это, Вы указываете столбец и строку на каждом управлении. Это делает это чрезвычайно неудобным, чтобы переупорядочить или вставить вещи в список.

Существует ли способ заставить сетку использовать больше столбца/строк стиля HTML, где объекты являются ребенком строки, они находятся в, так, чтобы я мог переупорядочить легко?

Есть ли некоторое другое управление, которое позволит мне расположение форма легко?

15
задан Jack Ukleja 1 March 2017 в 04:53
поделиться

7 ответов

Есть ли WPF-эквивалент nobr?

Помните, что вы можете вкладывать панели:

<WrapPanel Orientation="Horizontal">
   <StackPanel Orientation="Horizontal">
      <Label>Some field</Label>
      <TextBox>Some value</TextBox>
   </StackPanel>
   <StackPanel Orientation="Horizontal">
      <Label>Another field</Label>
      <TextBox>Another value</TextBox>
   </StackPanel>
   ...
</WrapPanel>

Кроме того, для столбчатых макетов область общего размера Grid может координировать любое количество сеток, которые его используют:

<StackPanel Orientation="Vertical" Grid.IsSharedSizeScope="True">
   <Grid>
      <Grid.ColumnDefinitions>
         <ColumnDefinition Width="Auto" SharedSizeGroup="Label"/>
         <ColumnDefinition Width="*"/>
      </Grid.ColumnDefinitions>
      <Label Grid.Column="0">Some field</Label>
      <TextBox Grid.Column="1">Some value</TextBox>
   </Grid>
   <Grid>
      <Grid.ColumnDefinitions>
         <ColumnDefinition Width="Auto" SharedSizeGroup="Label"/>
         <ColumnDefinition Width="*"/>
      </Grid.ColumnDefinitions>
      <Label Grid.Column="0">Another field</Label>
      <TextBox Grid.Column="1">Another value</TextBox>
   </Grid>
</StackPanel>

Мне не нравится, насколько многословен XAML для этого, особенно то, что вам нужно повторять определения столбцов. Хотя, если правильно структурировать классы и использовать шаблоны, это не так уж и страшно. И обратите внимание, что вы нигде в этой схеме не отслеживаете номера строк, поэтому переупорядочить поля просто.

23
ответ дан 1 December 2019 в 00:59
поделиться

Возможно, вы ищете панель стека. Использование вертикальной панели StackPanel позволит вам последовательно расположить метку и элементы управления. Для каждой метки и элемента управления вам может понадобиться панель с горизонтальным стеком, подобная этой

<StackPanel Orientation="Vertical">
  <StackPanel Orientation="Horizontal">
     <Label Width="150">Name</Label>
     <TextBox Width="200" />
  </StackPanel>
  <StackPanel Orientation="Horizontal">
     <Label Width="150">Date of Birth</Label>
     <DatePicker Width="200" />
  </StackPanel>
</StackPanel>

. Теперь вы можете добавлять, удалять, редактировать и переупорядочивать содержимое по своему усмотрению, не беспокоясь о столбцах и строках.

6
ответ дан 1 December 2019 в 00:59
поделиться

Ознакомьтесь с материалами Карла.

http://web.archive.org/web/20150620104259/https://karlshifflett.wordpress.com/2008/10/23/wpf-silverlight-lob-form-layout-searching-for-a-better -solution /

Простой и чистый xaml:

<pt:Form x:Name="formMain" Style="{DynamicResource standardForm}" Grid.Row="1">
  <TextBox pt:FormItem.LabelContent="_First Name" />
  <TextBox pt:FormItem.LabelContent="_Last Name"  />
  <TextBox pt:FormItem.LabelContent="_Phone" Width="150" HorizontalAlignment="Left" />
  <CheckBox pt:FormItem.LabelContent="Is _Active" />    
</pt:Form>
2
ответ дан 1 December 2019 в 00:59
поделиться

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

Обычно я использую панель сетки, чтобы разбить окно на функциональные области. Затем я буду использовать серию StackPanels (часто это вертикальная панель стека с горизонтальными StackPanel внутри нее, каждая с меткой и текстовым полем).

К сожалению, сетки работают только так, как вы заявили. Элементы в них определяют строку и / или столбец, в котором они находятся. Если вы использовали Blend, добавление столбцов или строк сетки будет иметь элементы управления, которые автоматически изменят спецификацию строки / столбца, чтобы они оставались в том положении, в котором они были размещены.

Надеюсь, это поможет.

Пробная версия Expression Blend в Microsoft.

ОБНОВЛЕНИЕ:

VS2012 имеет множество функций Expression Blend, встроенных в конструктор WPF. Большая часть необходимости в копии Blend больше не существует, поскольку разработчики имеют доступ ко многим классным инструментам из Blend.

2
ответ дан 1 December 2019 в 00:59
поделиться

Попробуйте элемент управления UniformGrid.

5
ответ дан 1 December 2019 в 00:59
поделиться

В нашем продукте мы используем HeaderedContentControl для размещения форм в сетке.Шаблон элемента управления имеет метку и отступы / поля, чтобы содержимое элемента управления всегда располагалось соответствующим образом. В XAML мы просто добавляем их по столбцам.

Я бы опубликовал XAML, но сейчас настраиваю новый компьютер. : | Но насколько я помню, это выглядело бы примерно так:

<Style x:Key="hccFormStyle" Targettype="{x:Type HeaderedContentControl}>
... some setters for colors, margin, padding, etc...
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
  <Label Content={Binding Content} Target={Binding Tag}> <-- pass the control for the access key with the tag
  <ContentPresenter>
</ControlTemplate>
...triggers if necessary - hover states, etc...
</style>

Затем в сетке вы определяете свои строки и столбцы и помещаете по одному в каждую ячейку или просто в каждую строку:

<HeaderedContentControl x:Name="username" Grid.Column=0 Content="User Name" Tag=textboxUserName>
 <Textbox x:Name=textboxUserName>
</HeaderedContentControl>

Я мог бы отвечать Другой вопрос, но вот как мы выкладываем наши формы.

0
ответ дан 1 December 2019 в 00:59
поделиться

У меня была та же проблема, переупорядочивание элементов управления в макете на основе сетки - настоящая боль.

Итак, я написал настраиваемую панель, которая выполняет «макет формы» (группы из двух столбцов, все метки одинакового размера, все элементы управления одинакового размера, все выровнены и т. Д.), Она в моем блоге по адресу: http : //www.nbdtech.com/Blog/archive/2010/07/27/easy-form-layout-in-wpf-part-1-ndash-introduction-formpanel.aspx

0
ответ дан 1 December 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: