修复listview的高度以清空空间

时间:2015-01-14 09:24:40

标签: c# wpf listview

我是WPF的新手,想要将listview的高度设置到我的框架底部。列表视图的宽度已经设置了固定值。以下代码代表我的DockPanel:

<DockPanel 
    Name="dp"
    Width="200" 
    HorizontalAlignment="Left">
    <TextBox DockPanel.Dock="Top" Margin="0,5,0,5"/>
    <ListView Width="{Binding Path=ActualWidth, ElementName=dp}" Background="Yellow" DockPanel.Dock="Left">
        <ListViewItem Content="foobar"/>
        <ListViewItem Content="foobar2"/>
    </ListView>
</DockPanel> 

第一个屏幕截图将显示当前的szenario: http://i.imgur.com/XMbMh4t.png

并且高度的外壳伸展到高度,如下图所示: http://i.imgur.com/Tf7O4pK.png

非常感谢!

祝你好运

2 个答案:

答案 0 :(得分:1)

而不是:

<Window>
    <DockPanel>
        <Menu DockPanel.Dock="Top">
        </Menu>
        <DatePicker DockPanel.Dock="Top" />
        <TabControl>
            <TabItem>
                <StackPanel>
                </StackPanel>
            </TabItem>
            <TabItem>
                <StackPanel>
                    <Grid>
                    </Grid>
                    <DockPanel>
                        <TextBox DockPanel.Dock="Top" />
                        <ListView>
                        </ListView>
                    </DockPanel>
                </StackPanel>
            </TabItem>
            <TabItem>
            </TabItem>
        </TabControl>
    </DockPanel>
</Window>

试试这个:

<Window>
    <DockPanel>
        <Menu DockPanel.Dock="Top">
        </Menu>
        <DatePicker DockPanel.Dock="Top" />
        <TabControl>
            <TabItem>
                <StackPanel>
                </StackPanel>
            </TabItem>
            <TabItem>
                <DockPanel>  <!-- instead of StackPanel -->
                    <Grid DockPanel.Dock="Top">
                    </Grid>
                    <!-- can now get rid of this <DockPanel>  -->
                    <TextBox DockPanel.Dock="Top" />
                    <ListView>
                    </ListView>
                </DockPanel>
            </TabItem>
            <TabItem>
            </TabItem>
        </TabControl>
    </DockPanel>
</Window>

答案 1 :(得分:0)

您需要在VerticalAlignment="Stretch"元素上使用ListView。如果您需要横向执行相同的操作,HorizontalAlignment也是如此。

<DockPanel 
    Name="dp"
    Width="200" 
    HorizontalAlignment="Left">
    <TextBox DockPanel.Dock="Top" Margin="0,5,0,5"/>
    <ListView Width="{Binding Path=ActualWidth, ElementName=dp}" VerticalAlignment="Stretch" Background="Yellow" DockPanel.Dock="Left">
        <ListViewItem Content="foobar"/>
        <ListViewItem Content="foobar2"/>
    </ListView>
</DockPanel> 

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms751709(v=vs.110).aspx


我已使用VerticalAlignment="Stretch"测试了您的代码,我得到了您想要的结果:

enter image description here

<Window x:Class="WpfApplication1.MainWindow"
        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"
        xmlns:local="clr-namespace:WpfApplication1"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <DockPanel 
    Name="dp"
    Width="200" 
    HorizontalAlignment="Left">
    <TextBox DockPanel.Dock="Top" Margin="0,5,0,5"/>
    <ListView Width="{Binding Path=ActualWidth, ElementName=dp}" VerticalAlignment="Stretch" Background="Yellow" DockPanel.Dock="Left">
        <ListViewItem Content="foobar"/>
        <ListViewItem Content="foobar2"/>
    </ListView>
</DockPanel> 
    </Grid>
</Window>

如果无法使VerticalAlignment正常工作,我们可以将元素的ActualHeight绑定到其祖先元素。所以,将它添加到ListView:

Height="{ Binding Path=ActualHeight, RelativeSource={ RelativeSource Mode=FindAncestor, AncestorType={ x:Type Window } } }"