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
    来自己渲染它

无法在几何体上设置填充属性。一个形状始终有一个填充和一个笔划。如果需要不同的填充/笔划,请使用两个形状。