【发布时间】:2021-06-04 18:02:39
【问题描述】:
这里在顶部还可以,但是滚动到最后就不好了:
我可以看到这是因为这个属性:HorizontalScrollBarVisibility,但无论我设置它是什么,它都会占用空间。我希望它彻底消失。
如果我让窗口足够长以显示所有项目,它就消失了,所以我认为它是垂直滚动条占用空间,从而使数据网格显示垂直滚动条空间。
<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>
【问题讨论】:
-
您的代码没有导致它出现在我的机器上,它一定是由于流氓模板或您项目中未包含在此处的其他内容。
-
所以你看不到水平滚动条?
-
不,一点也不。我确实必须删除你对转换器的使用,因为你还没有发布它的来源,而我绑定的 ItemsSource 是
string[](尽管我怀疑这会导致这样的事情)。如果您想发布mcve,我很乐意再看一下,但您的项目中似乎还有其他原因导致了这个,而您没有包括在内。 -
实际上,等等……您的内容似乎一直延伸到列表控件的右边缘(并且可能超出),在这种情况下,它的可见性是正常的。您到底想做什么,夹住内容以使滚动条不出现?
-
是的,基本上调整窗口大小,使其适合宽度。我将发布显示窗口顶部和底部的更新图像,因为当我在顶部时我看不到水平滚动条。
标签: c# .net wpf datagrid styling