2015-01-03 5 views
0

Отказ от ответственности: Не уверен, что добавить в заголовок, чтобы было ясно, как слова, которые будут использоваться, это те, о которых я еще не знаю (и еще) и спрашиваю. Не стесняйтесь исправлять.Рациональное создание разметки XAML для обеспечения удобочитаемости и здравомыслия

Представьте сценарий с графическим интерфейсом, состоящим из входов 4x3, где каждый вход состоит из метки и текстового поля. На данный момент это делается путем явного объявления всех компонентов, и каждый компонент имеет следующее:

<Label x:Name="Label1" 
     Content="Text1" 
     HorizontalAlignment="Left" 
     VerticalAlignment="Top" 
     Margin="10,210,0,0" /> 
<TextBox x:Name="TextBox1" 
     HorizontalAlignment="Left" 
     VerticalAlignment="Top" 
     Width="120" 
     Height="23" Margin="10,241,0,0" 
     TextWrapping="Wrap" Text="TextBox" /> 

Есть рекомендуемый способ создания тех из «чего-то другого», как шаблон или такое, что руководящий все общие атрибуты в нем, устраняя необходимость для меня, чтобы ввести их в снова и снова (хорошо, те были автогенерированы, но все же ...)? Выравнивания и размеры являются утомительными ...

Что касается полей, возможно, есть функциональность компоновки? Я искал его, но хиты, связанные с XAML, которые я получил, были либо подозрительно странными, либо полагались на код. Это то, что нужно сделать или это можно сделать с XAML прямо сейчас?

+0

Я думаю, что вы хотите прочитать стилирование http://msdn.microsoft.com/en-us/library/ms745683%28v=vs.110%29.aspx – kenny

+0

Вы ищете 'ItemsControl'. –

ответ

0

Для правильной настройки макета следует использовать WPF Layout Controls. Чтобы сделать сетку, вы можете использовать Grid, UniformGrid и т. Д., В зависимости от ваших потребностей.

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

<Grid> 
    <Grid.Resources> 
     <Style TargetType="TextBox"> 
      <Setter Property="Width" Value="120" /> 
      <Setter Property="Height" Value="25" /> 
      <!-- etc... --> 
     </Style> 
    </Grid.Resources> 
    <Grid.RowDefinitions> 
     <!-- Row definitions here. --> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <!-- Column definitions here. --> 
    </Grid.ColumnDefinitions> 

    <!-- controls ... --> 

    <TextBox Text="{Binding YourProperty}" 
      Grid.Row="1" 
      Grid.Column="2" 
      /> 

    <!-- controls ... --> 

</Grid> 

Здесь стиль будет применяться к все TextBox's элементы управления.

+0

Возможно, я недопонимаю (или, может быть, я задаю неправильный путь). Я сейчас использую компонент * Grid * (это макет, на который вы ссылаетесь, правильно?), И мне требуется указать позицию, которую я использую с помощью полей. Я беру что-то, что бы установить положение (и размер, возможно, но это покрыто стилями) элементов управления, которые я бросаю туда. –

+1

Элемент управления сеткой имеет строки и столбцы, и вы можете указать положение каждого элемента управления с помощью подключенных свойств: Grid.Row, Grid.Column и т. Д. Вам не нужно использовать поля для указания позиции в Grid - это плохая практика. – stukselbax

+0

Извините, если я не задал правильный вопрос.Я имел в виду, что если возможно ** не использовать ** использование явного присвоения столбца/строки в объявлении каждого текстового поля. Я надеялся, что сетка или стиль могут определить правильный порядок и положение на основе ... ну ... вот где я застрял. +1 для примера с четким кодом! Что касается плохой практики - у меня было ощущение, что поля (так любезно предоставленные и широко применяемые), когда вытаскивание материала из панели инструментов в Visual Studio было неправильным. –

0

Вы имеете в виду WPF «Style». Со стилями вы определяете набор свойств, которые будут одинаковыми между всеми экземплярами элемента управления, которые используют этот стиль.

<Style x:Key="MyTextBoxStyle" TargetType="TextBox"> 
    <Setter Property="Width" Value="120" /> 
    <Setter Property="Height" Value="23" /> 
    <Setter Property="TextWrapping" Value="Wrap" /> 
    <!-- etc... --> 
</Style> 

<!-- This textbox will default its property values to those defined above --> 
<TextBox Style="{StaticResource MyTextBoxStyle}" /> 
+0

Я знал, что есть что-то для этой боли! Как насчет другой части - где сеттер свойства будет нестационарным? Я предполагаю, что стиль не будет делать. Мне нужно сделать это по-другому, не так ли? Предложения? –

+0

В настройках стиля вы можете использовать привязку данных и триггеры. – stukselbax

+0

@stukselbax Я проверил [MSDN] (http://msdn.microsoft.com/en-us/library/system.windows.style.triggers%28v=vs.110%29.aspx) для триггеров и как далеко Я понимаю, что он используется для событий - задайте тот или иной цвет (или любое другое свойство), когда это или что происходит (будь то клик или мышь, а что нет). Мне нужно «запускать» при добавлении компонента в фрейм ** и ** иметь разные «стили» для каждого (разные, например, положение/маржа). Возможно, это мое невежество - я просто не понимаю, как использовать триггеры/привязки, чтобы добраться туда. Пожалуйста, объясни. –

 Смежные вопросы

  • Нет связанных вопросов^_^