13

この問題にはエレガントな解決策があるはずですが、オンラインで何も見つかりません。ListBox を含む、幅/高さ * の 1 つの列と行を持つグリッドがあります。Window SizeToContents を WidthAndHeight に設定して、UI ウィジェット/フォントのセットごとに適切なサイズにウィンドウのサイズを変更できるようにします。ListBox にアイテムを追加すると、サイズが変更され、ウィンドウが大きくなります。

ウィンドウのサイズを変更する場合は ListBox のサイズを変更したいのですが、ListBox の幅よりも長いコンテンツを追加する場合は、スクロールバーを表示し、スクロールバーを大きくしないようにして、ウィンドウが大きくなるようにします。Window に明示的なサイズを設定し、SizeToContent を手動 (デフォルト) に設定すると、意図したとおりに動作します。

起動時にウィンドウのサイズをコンテンツに合わせて変更し、ウィンドウのサイズに合わせて ListBox を拡大し続ける方法はありますか?

4

5 に答える 5

2

HorizontalAlignment="Stretch" VerticalAlignment="Stretch"

于 2014-09-03T10:36:42.620 に答える
1

これは、ここで説明されているように、SizeToContent プロパティを WidthAndHeight に設定した結果の意図した動作です。

ListBox の Width と Height をそのコンテナーの ActualWidth プロパティと ActualHeight プロパティにバインドするか、コンバーターを使用してそれらを Window のそれぞれのプロパティに直接バインドします。

于 2013-03-20T11:44:00.213 に答える
0

以下の要件があることを願っています.1)ListBoxは、コンテンツのサイズが元のサイズよりも大きくなった場合にスクロールバーを使用する必要があります。

2) ウィンドウのサイズが変更された場合、ListBox はウィンドウと共に拡大/縮小する必要があります。

簡単な例で同じことを試しました。これを確認してください。要件と異なる場合はお知らせください。

XAML コード:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="30"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <TextBlock Text="I am in Main Grid"/>
        <ListBox Grid.Row="1" BorderBrush="BlueViolet" BorderThickness="5" Margin="10">
            <TextBlock Text="I am a ListBox"/>
            <Button Content="Add Height and Width of ListBox by 100 pixels" Click="Button_Click"/>
            <ListBoxItem Content="ListBoxItem" Background="AliceBlue" Margin="10" BorderBrush="Blue" Width="{Binding ListBoxWidth}" Height="{Binding ListBoxHeight}"/>
        </ListBox>
    </Grid>
</Window>

C# コード:

public partial class MainWindow : Window,INotifyPropertyChanged
{
    private int m_ListBoxWidth = 350;

    public int ListBoxWidth
    {
        get { return m_ListBoxWidth; }
        set 
        {
            m_ListBoxWidth = value;
            OnPropertyChanged("ListBoxWidth");
        }
    }

    private int m_ListBoxHeight = 150;

    public int ListBoxHeight
    {
        get { return m_ListBoxHeight; }
        set 
        {
            m_ListBoxHeight = value; 
            OnPropertyChanged("ListBoxHeight"); 
        }
    }

    public MainWindow()
    {
        InitializeComponent();
        DataContext = this;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        ListBoxWidth += 190;
        ListBoxHeight += 140;
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
于 2014-11-24T03:52:41.243 に答える
-1

ウィンドウのサイズを変更したときに ListBox のサイズを変更するには、次を使用します。

<ListBox HorizontalAlignment="Stretch" VerticalAlignment="Stretch" .../>

ListBox のデフォルト テンプレートには ScrollViewer が含まれているため、ListBox でスクロールを有効にするには、ここで回答を見つけることができます。

ListBox で垂直スクロールバーを取得するにはどうすればよいですか?

于 2012-02-08T22:51:11.750 に答える