gpt4 book ai didi

c# - WPF 列表框超出屏幕大小(MVVM 灯)

转载 作者:行者123 更新时间:2023-11-30 15:34:57 36 4
gpt4 key购买 nike

我有一个典型的 MVVM 结构。一个主窗口由一些标签和一个 View 模型(绑定(bind)为 ContentControl)组成。这个 View 模型有一个列表框,我可以在其中添加条目。随着列表的增长,我的 View 模型的高度也会增长,因此整个应用程序的高度也会增长。不幸的是,尺寸并没有停在屏幕边缘,而是刚好超出屏幕。我在主窗口上尝试了所有不同的尺寸限制, View 模型在两个维度上都被拉伸(stretch)了。此外,我试图为列表框获取滚动条,但没有成功(或者它就在那里,但如果我强制使用它,则不会启用。)

如何将最大尺寸限制为屏幕分辨率(全屏)并在达到尺寸时为列表框获取滚动条?

€:好的,这里应该是我代码的相关部分。我尝试了 1024x768 的固定大小,但即使那样也不起作用。

主窗口.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>

最佳答案

您需要在 Window 上将行高设置为 *对于 ContentControl和你的 ListBoxUserControl填充可用空间而不是尝试获取所需内容。

这很好用:

主窗口.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>完全地。默认行为是您所寻找的。

当您有多于 1 行时,您可以选择指定 Height="*"或者只是删除 Height来自 RowDefinition 的属性(property)

<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>

关于c# - WPF 列表框超出屏幕大小(MVVM 灯),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15622306/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com