如何将窗口大小本身设置为最长的字符串

时间:2013-08-22 12:54:03

标签: wpf window size

我正在为我的应用程序添加一个新窗口。此应用程序包含ListBox,其ItemsSource属性绑定到ObservableCollection个视图模型对象。以下是用于呈现视图模型对象的数据模板:

<DataTemplate x:Key="DomainTemplate" DataType="DomainViewModel">
    <Border BorderBrush="{Binding Converter={StaticResource BrushConverter}, Path=IsSelected}"
            BorderThickness="2"
            Margin="5"
            Name="SelectedBorder">
        <Button Click="SelectDomain_Click"
                Content="{Binding Path=Name}"
                FontSize="16"
                FontWeight="Bold"
                Height="60"
                IsEnabled="{Binding Path=CurrentSiteIsValid, RelativeSource={RelativeSource AncestorType={x:Type c:DomainPicker}}}"
                Margin="5" />
    </Border>
</DataTemplate>

我正在使用HorizontalContentAlignment="Stretch"上的ListBox设置,以使Buttons填充ListBox的宽度。此外,视图模型对象是从数据库中读取的,而Name属性可以包含最多80个字符长的任何字符串。

问题在于我希望Buttons的宽度与Button的宽度相同,如果它直接在窗口上,则标题最长。然后,ListBox应调整其大小以包含Button,最后窗口应将其自身调整为ListBox

我该如何做到这一点?

1 个答案:

答案 0 :(得分:2)

要使Button控件的长度相同,您可以将Grid属性设置为Grid.IsSharedSizeScope的{​​{1}}添加到true。使用DataTemplate属性集定义一列:

SharedSizeGroup

要让<DataTemplate x:Key="DomainTemplate" DataType="DomainViewModel"> <Grid Grid.IsSharedSizeScope="True"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" SharedSizeGroup="Button" /> </Grid.ColumnDefinitions> <Border BorderBrush="{Binding Converter={StaticResource BrushConverter}, Path=IsSelected}" BorderThickness="2" Margin="5" Name="SelectedBorder"> <Button Click="SelectDomain_Click" Content="{Binding Path=Name}" FontSize="16" FontWeight="Bold" Height="60" IsEnabled="{Binding CurrentSiteIsValid, RelativeSource={RelativeSource AncestorType={x:Type c:DomainPicker}}}" Margin="5" /> </Border> </Grid> </DataTemplate> 控件停止填充Button,请从中删除ListBox声明。

要使HorizontalAlignment="Stretch"大小适合内容,请将其Window属性设置为SizeToContent,并从其声明中删除所有WidthAndHeightWidth属性。< / p>

让我知道它是怎么回事。