0

var a1 = "HEL"; var a2 = "こんにちは"; var a3 = "LLO"; 変数の長さ = 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 UI を使用しているため、ここでは奇妙に見えると思います。

Segoe UI を使用して結果を達成する方法はありますか、または適切な間隔で使用できる同様のフォント、または誰かが私が考えたことのない他のスマートなソリューションを持っているのでしょうか? :-)

ありがとう

編集

一日の終わりに、これを次のような関連アイテムに表示したい:

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

グリッドビューを使用したくありません。

4

2 に答える 2

1

ListBox に 2 つのデータを別々にフィードし、データ テンプレートを使用します。方法は次のとおりです。

まず、挿入する各アイテムを表す小さなクラスを作成します。

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" },
};

繰り返しますが、このコレクションは既にアプリに存在している可能性があります。

3 番目に、目的のレイアウトを指定する 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>

(アイテムに必要な正確な配置を推測しましたが、明らかに微調整できます。)

また、ListBox.ItemContainerStyle を使用して、ListBoxItems の Horizo​​ntalContentAlignment を Stretch に設定する必要があることに注意してください。そうしないと、各 ListBoxItem が必要なスペースだけを占有するため、すべての Grid 列が最小サイズになり、まっすぐに連結されたように見えます。Stretch は、各 ListBoxItem が全幅を埋めるようにするため、それに応じて Grid 列が強制的に拡大されます。

于 2010-02-11T01:10:02.673 に答える
0
<ListBox
     x:Name="listBox" HorizontalContentAlignment="Right"/>

チェックしてください:)

于 2010-02-11T00:16:58.960 に答える