C# WPF列表框超出屏幕大小(MVVM灯光)
我有一个典型的MVVM结构。主窗口由一些标签和viewmodel(绑定为ContentControl)组成。此viewmodel有一个列表框,我可以在其中添加条目。随着列表的增加,我的viewmodel的高度也随之增加,因此整个应用程序的高度也随之增加。不幸的是,这个尺寸并没有停在屏幕边缘,而是从屏幕上长出来。我在主窗口上尝试了所有不同的大小限制,viewmodel在两个维度上都被拉伸。 此外,我试图为列表框获取一个滚动条,但没有成功(或者它就在那里,但如果我强制它,它就没有启用) 如何将最大大小限制为屏幕分辨率(全屏),并在达到该大小时获取列表框的滚动条 欧元:好的,这应该是我代码的相关部分。我试过固定尺寸的1024x768,但即使这样也不行 MainWindow.xamlC# WPF列表框超出屏幕大小(MVVM灯光),c#,wpf,listbox,scrollbar,C#,Wpf,Listbox,Scrollbar,我有一个典型的MVVM结构。主窗口由一些标签和viewmodel(绑定为ContentControl)组成。此viewmodel有一个列表框,我可以在其中添加条目。随着列表的增加,我的viewmodel的高度也随之增加,因此整个应用程序的高度也随之增加。不幸的是,这个尺寸并没有停在屏幕边缘,而是从屏幕上长出来。我在主窗口上尝试了所有不同的大小限制,viewmodel在两个维度上都被拉伸。 此外,我试图为列表框获取一个滚动条,但没有成功(或者它就在那里,但如果我强制它,它就没有启用) 如何将最大大
<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>
所讨论的视图模型
<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>
您需要在
窗口中为ContentControl
和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>
也可以通过以下两种方式实现:
在窗口中
可以完全删除…
。默认行为是您所寻找的
当您有多行时,您可以选择指定Height=“*”
,或者从RowDefinition
中删除Height
属性
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
发布相关代码和XAML。如果你把你的列表框放在ScrollViewer里,它会工作吗?不,它仍然在增长。ListBox或ProgramView不知何故不知道外部窗口的大小,我想,只是看到@Dilshod的第二条评论。这就是答案(*或1*)来填充可用空间,而不是获得实际总高度required@Viv抱歉,由于更正,我刚刚删除了它。将RowDefinition Height=“auto”更改为RowDefinition Height=“*1”可能会解决此问题。谢谢,这非常有帮助
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>