我有一个典型的MVVM结构。主窗口由一些标签和一个视图模型(绑定为ContentControl)组成。此视图模型有一个列表框,我在其中添加条目。随着列表的增长,我的viewmodel的高度也会增长,因此整个应用程序的高度也会增加。不幸的是,尺寸并没有停留在屏幕的边缘,只是从屏幕上长出来。我在主窗口尝试了所有不同的大小限制,视图模型在两个维度都被拉伸。 此外,我试图获得列表框的滚动条,但没有成功(或者只是在那里但是如果我强制它则不启用。)
如何将最大尺寸限制为屏幕分辨率(全屏)并在达到尺寸时获取列表框的滚动条?
€:好的,这应该是我的代码的相关部分。我尝试了固定大小的1024x768,但即使这样也行不通。
MainWindow.xaml
<Window x:Class="SWS.MainWindow"
DataContext="{Binding Main, Source={StaticResource Locator}}"
Width="1024"
Height="768"
MaxWidth="1024"
MaxHeight="768">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ContentControl Grid.Row="0" Content="{Binding CurrentViewModel}" />
</Grid>
</Window>
有问题的ViewModel
<UserControl x:Class="SWS.Views.ProgramView"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<DockPanel Grid.Row="0">
<Label Width="65" Content="{x:Static p:Resources.PrV_Number}" />
<Label Width="75" Content="{x:Static p:Resources.PrV_Weight}" />
<Label Width="55" Content="{x:Static p:Resources.PrV_Action}" />
<Label Content=" " />
</DockPanel>
<ListBox Grid.Row="1"
VerticalAlignment="Stretch"
ItemsSource="{Binding ParticleCollection}"
ScrollViewer.CanContentScroll="True"
ScrollViewer.VerticalScrollBarVisibility="Auto">
<ListBox.ItemTemplate>
<DataTemplate>
<DockPanel>
<TextBlock Text="{Binding ID}" Width="53" />
<TextBlock Text="{Binding Weight, StringFormat=F4}" Width="65" />
<TextBlock Text="{Binding Action}" Width="52" />
</DockPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</UserControl>
答案 0 :(得分:4)
您需要将Window
的行高设置为ContentControl
,将ListBox
设置为UserControl
以填充可用空间,而不是尝试获取所需内容。
这很好用:
MainWindow.xaml:
<Window x:Class="SWS.MainWindow"
DataContext="{Binding Main, Source={StaticResource Locator}}"
Width="1024"
Height="768"
MaxWidth="1024"
MaxHeight="768">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ContentControl Grid.Row="0" Content="{Binding CurrentViewModel}" />
</Grid>
</Window>
和UserControl
:
<UserControl x:Class="SWS.Views.ProgramView"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
...
</Grid>
</UserControl>
还可以通过多种方式实现这一目标:
在Window
中,您可以完全删除<Grid.RowDefinitions>...<Grid.RowDefinitions>
。默认行为是您要查找的内容。
当您有多于一行时,您可以选择指定Height="*"
或只删除Height
RowDefinition
属性
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>