Заполнение текста в списке - PullRequest
0 голосов
/ 11 февраля 2010

var a1 = "HEL"; var a2 = "HELLO"; var a3 = "LLO"; длина var = a2.Length + 5;

        listbox.Items.Add(a1.PadRight(length) +"End");
        listbox.Items.Add(a2.PadRight(length) + "End");
        listbox.Items.Add(a3.PadRight(length) + "End");

У меня есть такой код, который, очевидно, дополняет весь текст так, что слово End выравнивается.

Проблема в том, что мне нужно изменить шрифт из списка wpf с Segoe UI на Courier New, чтобы это работало. Остальная часть моего приложения использует пользовательский интерфейс Segoe, поэтому я думаю, что здесь это выглядит странно.

Есть ли способ достичь результата с помощью Segoe UI или, возможно, подобный шрифт с правильным интервалом, который я мог бы использовать, или, может быть, у кого-то есть какое-то другое умное решение, о котором я даже не задумывался? : -)

Спасибо

редактировать

в конце дня я хочу, чтобы это отображалось для связанных элементов, таких как:

ITEM A    -> ITEM B
ITEM X    -> ITEM Y
ITEM C    -> ITEM E

не хочу использовать gridview.

Ответы [ 2 ]

1 голос
/ 11 февраля 2010

Подайте ListBox две части данных отдельно и используйте шаблон данных. Вот как.

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

public class WordPair {
  public string First { get; set; }
  public string Second { get; set; }
}

(Возможно, у вас уже есть подходящий класс и / или коллекция в вашем приложении - я предполагаю, что эти пары строк откуда-то идут!)

Во-вторых, установите ваш ListBox.ItemsSource для набора этих вещей:

listBox.ItemsSource = new List<WordPair> {
  new WordPair { First = "ITEM A", Second = "ITEM B" },
  new WordPair { First = "ITEM X", Second = "ITEM Y" },
};

Опять же, эта коллекция уже может существовать в вашем приложении.

В-третьих, создайте DataTemplate, указав желаемый макет, и назначьте его вашему ListBox.ItemTemplate:

<!-- in your Window.Resources section -->
<DataTemplate x:Key="AlignedPairs">
  <Grid>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="*" />
      <ColumnDefinition Width="Auto" />
      <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <TextBlock Text="{Binding First}" Grid.Column="0" />
    <TextBlock Text="->" TextAlignment="Center" Grid.Column="1" />
    <TextBlock Text="{Binding Second}" TextAlignment="Right" Grid.Column="2" />
  </Grid>
</DataTemplate>

<ListBox Name="listBox" ItemTemplate="{StaticResource AlignedPairs}">
  <ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem">
      <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    </Style>
  </ListBox.ItemContainerStyle>
</ListBox>

(Я угадал, какое именно выравнивание вы хотите для предметов, но вы, очевидно, можете настроить его.)

Обратите внимание, что вам также необходимо установить для параметра HorizontalContentAlignment объекта ListBoxItems значение Stretch, используя ListBox.ItemContainerStyle. В противном случае каждый ListBoxItem будет занимать только необходимое ему пространство, в результате чего все столбцы Grid будут иметь минимальный размер и выглядеть как прямая конкатенация. Функция Stretch заставляет каждый ListBoxItem заполнять всю ширину, поэтому столбцы Grid вынуждены соответственно увеличиваться.

0 голосов
/ 11 февраля 2010
<ListBox
     x:Name="listBox" HorizontalContentAlignment="Right"/>

проверь:)

...