3

私は WPF アプリケーションを持っており、TextBox コントロールが常にインラインになるようにいくつかの Label コントロールと TextBox コントロールを配置する方法を探していますが、Label コンテンツを動的にすることもできます (必要に応じて TextBoxes を移動する必要があります)。

説明するのは少し難しいので、ここに私の要件を示すスクリーンショットをいくつか示します...

前:

ここに画像の説明を入力

後:

ここに画像の説明を入力

最初の TextBox は、長いテキスト用のスペースを確保するために右に移動しますが、2 番目の TextBox も最初のテキストのインラインを維持するために移動します。(私が望む動作は、それぞれ2つのセルの2つの行を持つHTMLテーブルの動作に似ています)

私は WPF にかなり慣れていないことを念頭に置いて (完全に間違った道を進んでいる可能性があります)、動的なサイズのラベルに対応するためにいくつかの StackPanels を使用しました。ただし、もちろん問題は、両方の StackPanel が互いを認識していないことです。

これが私の現在のコードです:

<StackPanel Orientation="Horizontal">
    <Label Content="Label 1" HorizontalAlignment="Left" VerticalAlignment="Top"/>
    <TextBox HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" VerticalAlignment="Top" Width="200"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
    <Label Content="Label 2" HorizontalAlignment="Left" VerticalAlignment="Top"/>
    <TextBox HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" VerticalAlignment="Top" Width="200"/>
</StackPanel>

StackPanels を使用して必要なものを取得する方法はありますか? そうでない場合、要件を満たすために他にどのようなコントロールまたは方法を使用できますか?

4

2 に答える 2

3

すべてのコントロールで列のサイズを同じにしたい場合は、単純にGrid.

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="23"/>
        <RowDefinition Height="23"/>
    </Grid.RowDefinitions>

    <Label Grid.Row="0" Grid.Column="0" Content="Longer Label 1"/>
    <TextBox Grid.Row="0" Grid.Column="1" TextWrapping="Wrap"/>
    <Label Grid.Row="1" Grid.Column="0" Content="Label 2" />
    <TextBox Grid.Row="1" Grid.Column="1" TextWrapping="Wrap"/>    
</Grid>

この設定では、最初の列が最も幅の広いラベルに合わせてサイズ変更され、2 番目の列が残りの部分を占めます。

于 2013-10-28T16:24:30.730 に答える