我正在为我的应用程序添加一个新窗口。此应用程序包含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
。
我该如何做到这一点?
答案 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
,并从其声明中删除所有WidthAndHeight
和Width
属性。< / p>
让我知道它是怎么回事。