C# 自定义形状为包含的几何图形wpf设置不同的颜色
我创建了一个自定义的C# 自定义形状为包含的几何图形wpf设置不同的颜色,c#,wpf,shape,shapes,pathgeometry,C#,Wpf,Shape,Shapes,Pathgeometry,我创建了一个自定义的形状,它由一个矩形和一个文本构成。代码如下: protected override Geometry DefiningGeometry { get { var formattedText = new FormattedText(Text, CultureInfo.CurrentCulture, FlowDirection.LeftToRight, new Typeface("Verdana"), 14,
形状
,它由一个矩形
和一个文本
构成。代码如下:
protected override Geometry DefiningGeometry
{
get
{
var formattedText = new FormattedText(Text, CultureInfo.CurrentCulture, FlowDirection.LeftToRight, new Typeface("Verdana"), 14, Brushes.Transparent);
var chosenTextPoint = new Point
{
X = ((Location.X < BottomRight.X) ? Location.X : BottomRight.X) + 5,
Y = ((Location.Y < BottomRight.Y) ? Location.Y : BottomRight.Y) + 5
};
Stroke = Brushes.ForestGreen;
StrokeThickness = (IsSelected) ? HighlightedValue : HighlightedValue / 2;
Rectangle = new Rect(Location, BottomRight);
var rectangleGeometry = new RectangleGeometry(Rectangle);
var textGeometry = formattedText.BuildGeometry(chosenTextPoint);
var combinedGeometry = new CombinedGeometry
{
GeometryCombineMode = GeometryCombineMode.Xor,
Geometry1 = rectangleGeometry,
Geometry2 = textGeometry
};
combinedGeometry.Geometry1.SetValue(FillProperty, Brushes.Blue);
combinedGeometry.Geometry1.InvalidateProperty(FillProperty);
Fill = (IsSelected) ? Brushes.Transparent : null;
return combinedGeometry;
}
}
受保护的替代几何体定义几何体
{
得到
{
var formattedText=新格式化文本(文本,CultureInfo.CurrentCulture,FlowDirection.LeftToRight,新字体(“Verdana”),14,画笔.透明);
var chosenTextPoint=新点
{
X=((Location.X
combinedGeometry
是我最近添加的,之前我使用了PathGeometry
。在这两种情况下,矩形
和文本
都使用相同的颜色,并且“受到”相同的形状效果
我想知道有什么办法把两者分开吗?通过分离,我的意思是它们都是
形状中的单个元素,我可以自由地修改它们中的任何一个或全部一起修改它们?几何体没有颜色-它只是它的名称所暗示的<代码>形状
s使用填充和笔划笔刷绘制单个几何体
您可以:
- 使用多种形状。这可能代价高昂,因为每个
形状都是一个成熟的控件,可以接受输入、渲染等
- 使用一个
绘图
,它可以包含多个具有多个画笔的几何图形,然后使用图像
控件中的绘图图像
(一种图像源
)或绘图画笔
(一种画笔
)作为其他控件的填充/背景来渲染它(例如,矩形
)。请注意,Blend(Visual Studio附带的工具)可以将一组控件转换为绘图画笔
(工具>制作画笔)
- 从头开始创建一个控件,继承自
FrameworkElement
,并通过重写OnRender
来自己渲染它
无法在几何体上设置填充属性。一个形状始终有一个填充和一个笔划。如果需要不同的填充/笔划,请使用两个形状。