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

问题描述 投票:0回答:1

这对我来说是个难题,因为我对此一团糟。 所以让我们想象一下有一个窗口 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 });

这是结果:

相反,我希望是这个:

所以我希望每个元素都能拉伸(调整大小/调整)到其中最大的元素。

实现我认为的唯一方法是首先循环计算最大的元素,然后根据结果设置窗口的大小。

有什么有效的方法吗?

*** 添加 ***

按照 Clemens 的解决方案,我在代码隐藏中完成了这个,效果很好!

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 });

结果非常好!

c# wpf textbox window-resize stretch
1个回答
1
投票

使用 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>
© www.soinside.com 2019 - 2024. All rights reserved.