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