C# 如何删除WPF数据网格底部的不可用空间?

C# 如何删除WPF数据网格底部的不可用空间?,c#,.net,wpf,datagrid,styling,C#,.net,Wpf,Datagrid,Styling,在这里,在顶部可以,但当我滚动到末尾时,就不好了: 我可以看出这是因为这个属性:HorizontalScrollBarVisibility,但无论我将其设置为什么,它都会占用空间。我希望它完全消失 如果我让窗口足够长以显示所有项目,它就消失了,这让我认为是垂直滚动条占用了空间,从而使datagrid显示垂直滚动条空间 <Window x:Class="ProfitTracker.MainWindow" xmlns="http://schemas.m

在这里,在顶部可以,但当我滚动到末尾时,就不好了:

我可以看出这是因为这个属性:HorizontalScrollBarVisibility,但无论我将其设置为什么,它都会占用空间。我希望它完全消失

如果我让窗口足够长以显示所有项目,它就消失了,这让我认为是垂直滚动条占用了空间,从而使datagrid显示垂直滚动条空间

<Window x:Class="ProfitTracker.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:ProfitTracker"
    mc:Ignorable="d"
    SizeToContent="Width"
    DataContext="{Binding RelativeSource={RelativeSource Self}}"
    Title="Profit Tracker"
    WindowStyle="None"
    AllowsTransparency="True"
    Height="464">

<Window.Resources>
    <local:NullImageConverter x:Key="nullImageConverter"/>

    <Style x:Key="DataGridColumnSeparatorStyle" TargetType="DataGridCell">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <Rectangle VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Fill="#1e90ff"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style x:Key="DataGridColumnAlarmStyle" TargetType="DataGridCell">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <Rectangle VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Fill="#000000"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style x:Key="RowStyleWithAlternation" TargetType="DataGridRow">
        <Setter Property="Background" Value="#141414"/>
        <Setter Property="Foreground" Value="White"/>
        <Setter Property="FontWeight" Value="Normal"/>
        <Style.Triggers>
            <Trigger Property="AlternationIndex" Value="1">
                <Setter Property="Background" Value="#1e1e1e"/>
            </Trigger>
        </Style.Triggers>
    </Style>

    <Style TargetType="DataGridCell">
        <Setter Property="TextBlock.TextAlignment" Value="Center" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DataGridCell}">
                    <Grid Background="{TemplateBinding Background}">
                        <ContentPresenter VerticalAlignment="Stretch"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="VerticalAlignment" Value="Stretch"/>
        <Setter Property="Padding" Value="0"/>
        <Setter Property="Margin" Value="0"/>
        <Setter Property="BorderThickness" Value="0"/>
        <Style.Triggers>

            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding Column.Header, RelativeSource={RelativeSource Self}}" Value=" "/>
                </MultiDataTrigger.Conditions>
                <MultiDataTrigger.Setters>
                    <Setter Property="DataGridCell.Background" Value="{Binding Path=Balance.ProfitPercentageColor}" />
                </MultiDataTrigger.Setters>
            </MultiDataTrigger>

            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding Column.Header, RelativeSource={RelativeSource Self}}" Value="Symbol"/>
                </MultiDataTrigger.Conditions>
                <MultiDataTrigger.Setters>
                    <Setter Property="DataGridCell.Background" Value="{Binding Path=Balance.ProfitPercentageColor}" />
                </MultiDataTrigger.Setters>
            </MultiDataTrigger>

            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding Column.Header, RelativeSource={RelativeSource Self}}" Value="Profit"/>
                </MultiDataTrigger.Conditions>
                <MultiDataTrigger.Setters>
                    <Setter Property="DataGridCell.Background" Value="{Binding Path=Balance.ProfitPercentageColor}" />
                    <Setter Property="DataGridCell.Foreground" Value="{Binding Path=Balance.ProfitColor}" />
                </MultiDataTrigger.Setters>
            </MultiDataTrigger>

            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding Column.Header, RelativeSource={RelativeSource Self}}" Value="PNL %"/>
                </MultiDataTrigger.Conditions>
                <MultiDataTrigger.Setters>
                    <Setter Property="DataGridCell.Background" Value="{Binding Path=Balance.ProfitPercentageColor}" />
                    <Setter Property="DataGridCell.Foreground" Value="{Binding Path=Balance.ProfitColor}" />
                </MultiDataTrigger.Setters>
            </MultiDataTrigger>

            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding Column.Header, RelativeSource={RelativeSource Self}}" Value="Day %"/>
                </MultiDataTrigger.Conditions>
                <MultiDataTrigger.Setters>
                    <Setter Property="DataGridCell.Background" Value="{Binding Path=PriceChangeDailyBackColor}" />
                    <Setter Property="DataGridCell.Foreground" Value="{Binding Path=PriceChangeDailyForeColor}" />
                </MultiDataTrigger.Setters>
            </MultiDataTrigger>

            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding Column.Header, RelativeSource={RelativeSource Self}}" Value="Hour %"/>
                </MultiDataTrigger.Conditions>
                <MultiDataTrigger.Setters>
                    <Setter Property="DataGridCell.Background" Value="{Binding Path=PriceChangeHourlyBackColor}" />
                    <Setter Property="DataGridCell.Foreground" Value="{Binding Path=PriceChangeHourlyForeColor}" />
                </MultiDataTrigger.Setters>
            </MultiDataTrigger>

            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding Column.Header, RelativeSource={RelativeSource Self}}" Value="Min %"/>
                </MultiDataTrigger.Conditions>
                <MultiDataTrigger.Setters>
                    <Setter Property="DataGridCell.Foreground" Value="{Binding Path=PriceChangeMinutelyForeColor}" />
                </MultiDataTrigger.Setters>
            </MultiDataTrigger>

            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding Column.Header, RelativeSource={RelativeSource Self}}" Value="Net BTC/m"/>
                </MultiDataTrigger.Conditions>
                <MultiDataTrigger.Setters>
                    <Setter Property="DataGridCell.Background" Value="{Binding Path=LastMinuteVolumeColor}" />
                </MultiDataTrigger.Setters>
            </MultiDataTrigger>

            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Background" Value="{x:Null}" />
                <Setter Property="BorderBrush" Value="{x:Null}" />
            </Trigger>
        </Style.Triggers>
    </Style>

    <Style TargetType="DataGridColumnHeader">
        <Setter Property="HorizontalContentAlignment" Value="Center" />
    </Style>

    <Style TargetType="{x:Type ProgressBar}">
        <Setter Property="Padding" Value="0"/>
        <Setter Property="Margin" Value="0"/>
        <Setter Property="VerticalAlignment" Value="Stretch"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ProgressBar">
                    <Border BorderThickness="1" Background="#006400" CornerRadius="0" Padding="0">
                        <Grid x:Name="PART_Track">
                            <Rectangle x:Name="PART_Indicator" HorizontalAlignment="Left" Fill="#640000" />
                        </Grid>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <CollectionViewSource Source="{Binding Coins}" IsLiveSortingRequested="True" x:Key="MyKey" />

</Window.Resources>

<Grid>
    <DataGrid Name="dataGrid" ItemsSource="{Binding Source={StaticResource MyKey}}"  GridLinesVisibility="None" HorizontalScrollBarVisibility="Hidden" RowHeaderWidth="0" IsReadOnly="True" CanUserAddRows="False" CanUserResizeColumns="False" CanUserResizeRows="False" AutoGenerateColumns="False" AlternatingRowBackground="#282828" RowStyle="{StaticResource RowStyleWithAlternation}">
        <DataGrid.Columns>

            <DataGridTemplateColumn Header=" " MinWidth="0" Width="10"/>

            <DataGridTemplateColumn Header="Symbol" Width="74">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <Image RenderOptions.BitmapScalingMode="HighQuality" Stretch="Uniform" HorizontalAlignment="Center" VerticalAlignment="Center" Height="16" Margin="4,2,6,2" Source="{Binding IconFile, Converter={StaticResource nullImageConverter}}" />
                            <TextBlock Text="{Binding Path=Symbol}" HorizontalAlignment="Left"/>
                        </StackPanel>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

            <DataGridTemplateColumn MinWidth="0" Width="2" CellStyle="{StaticResource DataGridColumnSeparatorStyle}"/>
            <DataGridTextColumn Header="Lowest" Width="64" Binding="{Binding Path=LowestDailyPriceDisplay}" Foreground="#b40000"/>

            <DataGridTemplateColumn Header="Price" Width="64">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Grid>
                            <ProgressBar Value="{Binding Path=PriceProgress, Mode=OneWay}" Minimum="0" Maximum="1"/>
                            <TextBlock Text="{Binding Path=PriceDecimalDisplay}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                        </Grid>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

            <DataGridTextColumn Header="Highest" Width="64" Binding="{Binding Path=HighestDailyPriceDisplay}" Foreground="#00b400"/>
            <DataGridTemplateColumn MinWidth="0" Width="2" CellStyle="{StaticResource DataGridColumnSeparatorStyle}"/>
            <DataGridTextColumn Header="Unit Price" Width="64" Binding="{Binding Path=Balance.UnitPriceDisplay}" />
            <DataGridTextColumn Header="Amount" Width="64" Binding="{Binding Path=Balance.AvailableAmountDisplay}" />
            <DataGridTextColumn Header="Capital" Width="64" Binding="{Binding Path=Balance.TotalValueDisplay}" />
            <DataGridTemplateColumn MinWidth="0" Width="2" CellStyle="{StaticResource DataGridColumnSeparatorStyle}"/>
            <DataGridTextColumn Header="Profit" Width="64" Binding="{Binding Path=Balance.ProfitDisplay}"/>
            <DataGridTextColumn Header="PNL %" Width="64" Binding="{Binding Path=Balance.ProfitPercentageDisplay}"/>
            <DataGridTextColumn Header="Day %" Width="64" Binding="{Binding Path=PriceChangeInPercentDailyDisplay}"/>
            <DataGridTextColumn Header="Hour %" Width="64" Binding="{Binding Path=PriceChangeInPercentHourlyDisplay}"/>
            <DataGridTemplateColumn MinWidth="0" Width="2" CellStyle="{StaticResource DataGridColumnSeparatorStyle}"/>
            <DataGridTextColumn Header="Min %" Width="64" Binding="{Binding Path=PriceChangeInPercentMinutelyDisplay}"/>

            <DataGridTemplateColumn Header="Vol BTC/h" Width="64">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Grid>
                            <ProgressBar Value="{Binding Path=TotalSellVolumePercentage, Mode=OneWay}" Minimum="0" Maximum="1"/>
                            <TextBlock Text="{Binding Path=LastHourVolumeInBtcDisplay}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                        </Grid>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

            <DataGridTextColumn Header="Net BTC/m" Width="64" Binding="{Binding Path=LastMinuteVolumeInBtcDisplay}"/>
        </DataGrid.Columns>
    </DataGrid>
    <Border x:Name="DragControl" local:EnableDragHelper.EnableDrag="True" Visibility="Hidden">
        <TextBlock Text=" "/>
    </Border>
</Grid>

哦,好吧,从你的评论来看,你好像想让窗口自动调整大小以适应内容,对吗?默认情况下,WPF windows不会这样做,但您可以通过以下方式启用它:

<Window
    ...etc....
    SizeToContent="Width">


您的代码没有导致它出现在我的计算机上,这一定是由于恶意模板或项目中未包含的其他内容造成的。所以您没有看到水平滚动条?没有,一点也没有。我必须删除您对转换器的使用,因为您尚未发布该转换器的源代码,而我绑定到的ItemsSource是一个
字符串[]
(尽管我怀疑这会导致类似的情况)。如果你想发布一篇文章,我很乐意再看一看,但你的项目中似乎有其他东西导致了这一点,而你没有包括在内。事实上,请稍等……你的内容似乎一直延伸到列表控件的右边缘(可能超出了列表控件),在这种情况下,它的可见性是正常的。你到底想做什么,夹紧内容使滚动条不出现?是的,基本上调整窗口大小使其适合宽度。我将发布显示窗口顶部和底部的更新图像,因为当我在顶部时,我看不到水平滚动条。