-1

その中に aと aShapeから構成されるカスタムを作成しました。コードは次のとおりです。RectangleText

    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;
        }
    }

combinedGeometry最近追加したもので、その前は を使用していPathGeometryました。どちらの場合も、Rectangleと の両方Textが同じ色で着色されており、同じ形状効果が「被る」。

2つを分離する方法はありますか?分離するということは、両方が 内の個々の要素になることを意味し、それらのShapeいずれかまたは両方を一緒に自由に変更できますか?

4

1 に答える 1

0

AGeometryには色がありません。名前が示すとおりです。Shape■ フィル ブラシとストローク ブラシを使用して単一のジオメトリを描画します。

次のいずれかを実行できます。

  • 複数の形状を使用します。everyShapeは入力やレンダリングなどを受け入れることができる本格的なコントロールであるため、これにはコストがかかる可能性があります。
  • Drawing複数のブラシで複数のジオメトリを含むことができる を使用してから、コントロール内の (のDrawingImageタイプ)または(のタイプの) を他のコントロール (例: a ) の塗りつぶし/背景として使用してレンダリングします。Blend (Visual Studio に付属のツール) は、コントロールのグループを([ツール] > [ブラシの作成]) に変換できることに注意してください。ImageSourceImageDrawingBrushBrushRectangleDrawingBrush
  • コントロールをゼロから作成し、から継承しFrameworkElement、オーバーライドして自分でレンダリングしますOnRender
于 2016-07-19T19:18:58.410 に答える