我有一个控件,它是一个网格,第一行包含一些固定高度的按钮,第二行(和最后一行)包含一个ListView。然后我有一个主屏幕,其中只包含一个菜单和上面的用户控件。我希望将ListView的大小作为窗口的最大值,这意味着如果窗口最大化,ListView将很大,以防窗口较小,ListView也是如此(带有垂直滚动以帮助导航项目)。
这就是我这样做的方式: 窗口:
<Window x:Class="TestUI.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Width="auto" Height="auto"
MinHeight="300" MinWidth="300"
Title="Test"
DataContext="{Binding MainViewModel, Source={StaticResource Locator}}" >
<StackPanel Orientation="Vertical" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<DockPanel>
<Menu DockPanel.Dock="Top" >
<MenuItem Header="Item 1" Command="{Binding Command1}"/>
<MenuItem Header="Item 2" Command="{Binding Command2}"/>
<MenuItem Header="Item 3" Command="{Binding Command3}"/>
</Menu>
</DockPanel>
<DockPanel LastChildFill="True">
<ScrollViewer Content="{Binding Content}" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Disabled" DockPanel.Dock="Bottom" />
</DockPanel>
</StackPanel>
</Window>
用户控制:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="35" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Margin="5, 5, 5, 5" Orientation="Horizontal">
<Button Content="New" Width="60" Command="{Binding NewCommand}"/>
<Button Content="Remove" Width="60" Margin="10, 0, 0, 0" Command="{Binding RemoveCommand}" />
</StackPanel>
<DockPanel Grid.Row="1" Margin="5,5,5,5" LastChildFill="True" HorizontalAlignment="Stretch">
<ListView x:Name="ListView" SelectionMode="Single" DockPanel.Dock="Top" ItemsSource="{Binding Entities}" SelectedItem="{Binding SelectedEntity}" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto" VerticalAlignment="Stretch">
<ListView.View>
<GridView>
<GridViewColumn Width="auto" Header="Product" DisplayMemberBinding="{Binding Description}"/>
</GridView>
</ListView.View>
</ListView>
</DockPanel>
</Grid>
你能帮我吗?
谢谢!
答案 0 :(得分:2)
我刚检查过您的用户控件,Listview对接工作正常。您可以使用背景颜色验证设计器中的布局。将listview的背景设置为蓝色表示它正在使用可用空间。
我认为问题在于主窗体中的布局,特别是Stackpanel。这些因布局问题而臭名昭着,而且我可以告诉你不需要它。使用DockPanel作为高级容器而不是多个停靠面板。 (这就是他们的目的)
<DockPanel>
<Menu DockPanel.Dock="Top" >
<MenuItem Header="Item 1" Command="{Binding Command1}"/>
<MenuItem Header="Item 2" Command="{Binding Command2}"/>
<MenuItem Header="Item 3" Command="{Binding Command3}"/>
</Menu>
<ScrollViewer Content="{Binding Content}" VerticalScrollBarVisibility="Disabled"
HorizontalScrollBarVisibility="Disabled" DockPanel.Dock="Fill" />
</DockPanel>
这会将您的菜单放在面板的顶部,让包含用户控件(假设)的滚动查看器耗尽剩余的可用空间。
堆叠面板仅适用于安排区域内的物品。如果要使用布局来分配可用空间,请使用DockPanels或Grids。
答案 1 :(得分:0)
您好从GridviewColumn中删除宽度=“自动”。我希望这会有所帮助