wpf 如何使窗口大小适应其内容大小,反之亦然?

0dxa2lsx  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(229)

这对我来说是个难题,因为我对这件事有相当的混乱。因此,让我们想象有一个窗口SizeToContent=“WidthAndHeight”

<Window x:Class="Test.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:Test"
    mc:Ignorable="d" Title="MainWindow" SizeToContent="WidthAndHeight" >
    
    <ListBox Name="lbxInfo" Margin="10" FontSize="30" Grid.Row="0"/>
</Window>

因此窗口必须适应其内容。小菜一碟。
但困难的部分来了。内容是可变的,并适应拉伸窗口大小。所以最大的弦应该被正确地拉伸。

lbxInfo.Items.Add(new TextBox() { Text="AAA", Background = Brushes.Aqua, HorizontalContentAlignment= HorizontalAlignment.Stretch  });
lbxInfo.Items.Add(new TextBox() { Text = "BBB BBB", Background = Brushes.LavenderBlush, HorizontalContentAlignment = HorizontalAlignment.Stretch });
lbxInfo.Items.Add(new TextBox() { Text = "CCC CCC CCC", Background = Brushes.Lime, HorizontalContentAlignment = HorizontalAlignment.Stretch });

结果如下:

我希望是这一个:

所以我希望每个元素都能拉伸(调整大小/调整)到最大。
唯一的方法来实现我可以认为这是有一个第一次循环的元素计算最大的,然后设置窗口的大小后的结果。
有没有什么有效的方法来做这件事?

添加

以下克莱门斯解决方案,我已经做了这在代码背后,这工程奇迹!

var lbxInfo = new ListBox() { FontSize= 30 };
wndMain.Content = lbxInfo ;
lbxInfo.Items.Add(new ListBoxItem() { Content = "AAA", Background = Brushes.Aqua });
lbxInfo.Items.Add(new ListBoxItem() { Content = "BBB BBB", Background = Brushes.LavenderBlush });
lbxInfo.Items.Add(new ListBoxItem() { Content = "CCC CCC CCC", Background = Brushes.Lime });

结果是惊人的!

b1zrtrql

b1zrtrql1#

使用ListBox,其中ListBoxItems的HorizontalContentAlignment设置为Stretch

<ListBox ItemsSource="{Binding Items}">
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
    </ListBox.ItemContainerStyle>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBox Text="{Binding Text}" FontSize="30">
                <TextBox.Background>
                    <SolidColorBrush Color="{Binding Color}"/>
                </TextBox.Background>
            </TextBox>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

相关问题