我正在尝试在我拥有的DataGrid
中添加一些样式。
我目前正在开发一个应用程序,旨在显示大量的财务数据(数字矩阵),其中包含许多可视化工具,用于检测良好数据,错误数据......并在需要时通过将它们与目标值进行比较来纠正它们
目前,我的颜色代码基本上是:
我玩透明度来设置背景清晰,如果有点接近好的值,否则强。
现在我想添加另一种可视化工具:某种视觉模式,通知用户这个值虽然正确或错误,但存在潜在风险(正如我之前所说的那样是财务数据,因此,它主要测量的是亏损风险。)
当前的应用程序,在VBA中编程,使用一个技巧,向单元格添加一个空注释,因此角落上会出现一个小的红色三角形。
我想找到一种方法将其添加到我的XAML样式中,我想到的最好的方法是添加一个视觉模式。
这是我想要实现的一个例子:
在左栏中,您可以看到"正常显示"。 在右边,我添加了"危险风格",这应该意味着"警告,这个值有问题"。 第一行显示了在Excel上执行此操作的旧方法:使用虚假注释,在右上角添加红色三角形。
您对如何实现这一目标有任何想法吗? Adorner
可以做到这一点吗?
顺便说一下,网格是可编辑的,所以我显然不想放弃可编辑的方面,这让我怀疑可能Adorner
......
以下是当前XAML Style
,其应用为CellStyle
:
<Style x:Key="DynamicCellStyle" TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="#FF316AC5" />
</Trigger>
<Trigger Property="IsSelected" Value="False">
<Setter Property="Background">
<Setter.Value>
<MultiBinding Converter="{StaticResource CellToColorConverter}">
<!-- Some bindings for the converter to compute the actual color -->
</MultiBinding>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Grid Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
这里有什么想法吗?
非常感谢!
答案 0 :(得分:2)
对于某些人来说,这可能有些神奇,但我作为解决方法做的一件事是使用VisualBrush或DrawingBrush作为背景。您可以使用红色,绿色,白色和橙色的一组可视刷,并将散列图案作为叠加层。你可以用DrawingBrushes做同样的事情。
或者,大声思考,你可以使用DrawingBrush作为颜色的不透明蒙版。这样你只需要一个带有哈希模式的画笔。
[查看我的WPF书后...]
最简单的可能是将SpreadMethod设置为Repeat的LinearGradientBrush。使用起始点和端点值进行播放以获得条带效果。以下是本书的一个例子:
<LinearGradientBrush StartPoint=".45,.45" EndPoint=".55,.55" SpreadMethod="Repeat">
<GradientStop Offset="0" Color="Blue"/>
<GradientStop Offset="1" Color="Red"/>
</LinearGradientBrush>
答案 1 :(得分:2)
好的,我找到了一种非常合适的方法,使用DrawingBrush
<DrawingBrush TileMode="Tile"
ViewportUnits="RelativeToBoundingBox"
Viewport="0,0,0.20,1">
<DrawingBrush.Drawing>
<DrawingGroup>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="Red" Thickness="0.83"/>
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<RectangleGeometry Rect="0.3,0.4,0.3,0.21" RadiusX="0" RadiusY="0"/>
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing>
<GeometryDrawing.Pen>
<Pen Brush="Black" Thickness="0.05"/>
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<LineGeometry StartPoint="0,1" EndPoint="1,0" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
基本上你会绘制一个红色矩形(你可以改变当然的颜色),这将填充单元格,因此充当背景,并绘制5条对角线以上。
您可以通过在此处切换x号来在线更改数字:Viewport="0,0,x,1"
。在我的情况下,0.20
表示总表面的20%
,例如Geometry
将被绘制五次,每一次占据可用宽度的20%。
使用此画笔作为任何DataGridCell
的背景,您将获得以下结果:
这几乎就是我想要的(并且比dex3703的GradientBrush
想法更好一些)