Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF中的ListView未填充所有可用空间_C#_Wpf_Xaml - Fatal编程技术网

C# WPF中的ListView未填充所有可用空间

C# WPF中的ListView未填充所有可用空间,c#,wpf,xaml,C#,Wpf,Xaml,如何使WPF中的ListView填满所有可用空间?我试过很多很多东西,但都不管用 最近,我尝试将ListView嵌套在DockPanel中,然后在ListView上使用绑定来获取DockPanel的实际高度。这很好,但容器中还有其他控件,需要容纳它们 我真的不想在代码中编写OnControlLoaded()和OnControlResized()事件并调整ListView的大小。我能做什么 这是第10行带有令人不快的SortableListView的XAML <DockPanel&g

如何使WPF中的ListView填满所有可用空间?我试过很多很多东西,但都不管用

最近,我尝试将ListView嵌套在DockPanel中,然后在ListView上使用绑定来获取DockPanel的实际高度。这很好,但容器中还有其他控件,需要容纳它们

我真的不想在代码中编写OnControlLoaded()和OnControlResized()事件并调整ListView的大小。我能做什么

这是第10行带有令人不快的SortableListView的XAML

    <DockPanel>
        <StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Margin="15 5 5 5">
            <Button x:Name="btnAddCost" Padding="3" ToolTip="Add Cost" Margin="0 0 5 0" Click="btnAddCost_Click"  >
                Add Cost
            </Button>
            <Button x:Name="btnDeleteCost" Padding="3" ToolTip="Delete Cost" Margin="0 0 5 0" Click="btnDeleteCost_Click" IsEnabled="{Binding ElementName=lvCosts, Path=SelectedItem, Converter={StaticResource falseWhenNullConverter}}" >
                Delete Cost
            </Button>
        </StackPanel>
        <ctrls:SortableListView DockPanel.Dock="Top" x:Name="lvCosts" Margin="1" SelectionMode="Single" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
ContextMenuOpening="lvCosts_ContextMenuOpening"
DefaultActionSelected="lvCosts_DefaultActionSelected" MouseDoubleClick="lvCosts_MouseDoubleClick"
ItemsSource="{Binding Booking.AdditionalCosts}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Category" Width="100" DisplayMemberBinding="{Binding Path=Category.Name}" ctrls:SortableListView.SortPropertyName="Category">
                    </GridViewColumn>
                    <GridViewColumn Header="Supplier" Width="110" DisplayMemberBinding="{Binding Path=Supplier}" ctrls:SortableListView.SortPropertyName="Supplier">
                    </GridViewColumn>
                    <GridViewColumn Header="Buy Currency" Width="100" DisplayMemberBinding="{Binding Path=BuyCurrency.Name}" ctrls:SortableListView.SortPropertyName="BuyCurrency">
                    </GridViewColumn>
                    <GridViewColumn Header="Buy Price" Width="110" DisplayMemberBinding="{Binding Path=BuyPrice}" ctrls:SortableListView.SortPropertyName="BuyPrice">
                    </GridViewColumn>
                    <GridViewColumn Header="Sell Currency" Width="100" DisplayMemberBinding="{Binding Path=SellCurrency.Name}" ctrls:SortableListView.SortPropertyName="SellCurrency">
                    </GridViewColumn>
                    <GridViewColumn Header="Sell Price" Width="110" DisplayMemberBinding="{Binding Path=SellPrice}" ctrls:SortableListView.SortPropertyName="SellPrice">
                    </GridViewColumn>
                    <GridViewColumn Header="Margin" Width="180" DisplayMemberBinding="{Binding Path=Margin}" ctrls:SortableListView.SortPropertyName="Margin">
                    </GridViewColumn>
                </GridView>
            </ListView.View>
            <ListView.ContextMenu>
                <ContextMenu x:Name="mnuCostOptions" >
                    <MenuItem x:Name="mniAddCost" Header="_Add Cost" Click="mniAddCost_Click" ></MenuItem>
                    <MenuItem x:Name="mniEditCost" Header="View/_Edit Cost" Click="mniEditCost_Click" IsEnabled="False"></MenuItem>
                    <MenuItem x:Name="mniDeleteCost" Header="_Delete Cost" Click="mniDeleteCost_Click" IsEnabled="False"></MenuItem>
                </ContextMenu>
            </ListView.ContextMenu>
        </ctrls:SortableListView>
        <StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" Margin="0,0,0,5">
            <TextBlock Grid.Row="3" Grid.Column="0">Total Buy Price:</TextBlock>
            <rdf:NumericTextBox Grid.Row="3" Grid.Column="1" IsEnabled="False" MinWidth="50" Margin="0,0,10,0">
                <rdf:NumericTextBox.Text>
                    <Binding Path="Booking.AdditionalCostsBuyPriceConvertedTotal" UpdateSourceTrigger="PropertyChanged"
Converter="{StaticResource currencyStringConverter}" ConverterParameter="#0.00" Mode="OneWay">
                    </Binding>
                </rdf:NumericTextBox.Text>
            </rdf:NumericTextBox>
            <TextBlock Grid.Row="3" Grid.Column="0">Total Sell Price:</TextBlock>
            <rdf:NumericTextBox Grid.Row="3" Grid.Column="1" IsEnabled="False" MinWidth="50" Margin="0,0,10,0">
                <rdf:NumericTextBox.Text>
                    <Binding Path="Booking.AdditionalCostsSellPriceConvertedTotal" UpdateSourceTrigger="PropertyChanged"
Converter="{StaticResource currencyStringConverter}" ConverterParameter="#0.00" Mode="OneWay">
                    </Binding>
                </rdf:NumericTextBox.Text>
            </rdf:NumericTextBox>
            <TextBlock Grid.Row="3" Grid.Column="0">Total Margin:</TextBlock>
            <rdf:NumericTextBox Grid.Row="3" Grid.Column="1" IsEnabled="False" MinWidth="50" Margin="0,0,10,0">
                <Binding Path="Booking.AdditionalCostsMarginConvertedTotal" UpdateSourceTrigger="PropertyChanged"
Converter="{StaticResource currencyStringConverter}" ConverterParameter="#0.00" Mode="OneWay">
                </Binding>
            </rdf:NumericTextBox>
            <TextBlock Grid.Column="1" Grid.Row="3" HorizontalAlignment="Right" Text="{Binding Path=Booking.SellPriceCurrency.Name, Mode=OneWay}" Margin="0,0,0,0"/>
        </StackPanel>
    </DockPanel>

增加成本
删除成本
总购买价格:
总售价:
总利润:

谢谢,M

您有一个
DockPanel
包含:

  • StackPanel
  • a
    SortableListView
  • 另一个
    StackPanel
  • 1和2都停靠在顶部;3号船停靠在底部。这意味着你中间没有任何东西,比如在2和3之间。重新排列元素的顺序,将
    SortableListView
    放在第三位,并删除其
    DockPanel.Dock
    属性,使其占用剩余空间

    换句话说,不是你现在拥有的:

    <DockPanel>
        <StackPanel DockPanel.Dock="Top" ... >
        <ctrls:SortableListView DockPanel.Dock="Top" ... >
        <StackPanel DockPanel.Dock="Bottom" ... >
    </DockPanel>
    
    
    
    将其更改为:

    <DockPanel>
        <StackPanel DockPanel.Dock="Top" ... >
        <StackPanel DockPanel.Dock="Bottom" ... >
        <ctrls:SortableListView ... >
    </DockPanel>
    
    
    
    这取决于父容器是什么。发布一些XAML以便我们提供帮助。如果您使用
    HorizontalAlignment=“Stretch”
    将其放置在网格中,它将延伸到您对其内部的列施加的限制,请参见上面添加的代码。是否设置了容器的高度?(像窗户的高度)不。那没用。外观完全相同。那么它一定是由于包含DockPanel的元素。我注意到在第二个StackPanel中,您使用的是网格附加属性(行和列),但是StackPanel中没有网格。我怀疑您使用的是一个外部网格,您在问题中没有发布XAML。试着为你的窗口发布所有的XAML。这里没有网格,那些附加的属性是试图让它工作的遗留问题!尝试在问题中发布所有XAML,否则我将无法解决您的问题