首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可转换的DrawingBrush

可转换的DrawingBrush
EN

Stack Overflow用户
提问于 2015-11-17 15:52:00
回答 1查看 801关注 0票数 0

我试图以透明的方式创建DrawingBrush,但是我想不出如何设置这个透明性:(以下是XAML:

代码语言:javascript
复制
<Border Grid.Column="1" Grid.Row="1" BorderBrush="Yellow" Background="Green">
        <Rectangle>
            <Rectangle.Fill>
                <DrawingBrush>
                    <DrawingBrush.Drawing>
                        <DrawingGroup>
                            <GeometryDrawing Brush="Red">
                                <GeometryDrawing.Geometry>
                                    <CombinedGeometry GeometryCombineMode="Exclude">
                                        <CombinedGeometry.Geometry1>
                                            <RectangleGeometry Rect="0, 0, 110, 110" />
                                        </CombinedGeometry.Geometry1>
                                        <CombinedGeometry.Geometry2>
                                            <RectangleGeometry Rect="10, 10, 90, 90" />
                                        </CombinedGeometry.Geometry2>
                                    </CombinedGeometry>
                                </GeometryDrawing.Geometry>
                                <GeometryDrawing.Pen>
                                    <Pen Brush="Blue" Thickness=".3" />
                                </GeometryDrawing.Pen>
                            </GeometryDrawing>
                        </DrawingGroup>
                    </DrawingBrush.Drawing>
                </DrawingBrush>
            </Rectangle.Fill>
        </Rectangle>
    </Border>

产出如下:

  1. <GeometryDrawing Brush="Red">
  2. <Border Background="Green">

如何将画笔的背景色设置为Transparent

如果我在XAML (GeometryDrawing Brush="Transparent")中设置它,则画笔将从上控件Border获得背景色,并且所有内容都将是绿色。

其主要思想是在控制/刷的中间中绘制。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-17 20:28:12

从你的评论:

DrawingBrush只在内部矩形中绘制,并将所有“红色”区域设置为透明

WPF中的呈现模型不是这样工作的。在XAML中声明要绘制的内容时,您正在描述要呈现的对象的集合。透明的颜色(即alpha值为0,就像内置的Transparent值一样)不会将其下的像素“设置”为透明的;它只是不呈现自身。在对象中使用透明颜色只会显示该对象下面的任何内容。

如果要在边框内绘制由透明像素构成的绿色框,则根本不需要填充边框(因为这将通过透明像素显示),还需要定义一个Drawing,它可以绘制您想要的内容。即透明矩形,用于定义所需矩形的实际范围,然后在该矩形内定义一个较小的填充矩形。

例如:

代码语言:javascript
复制
<Window x:Class="TestSO33761293InsetRectangleBorder.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="525" Width="525">

  <Window.Resources>
    <DrawingBrush x:Key="drawingBrush1">
      <DrawingBrush.Drawing>
        <DrawingGroup>
          <GeometryDrawing Brush="Green">
            <GeometryDrawing.Geometry>
              <RectangleGeometry Rect="10, 10, 90, 90" />
            </GeometryDrawing.Geometry>
            <GeometryDrawing.Pen>
              <Pen Brush="Blue" Thickness=".3" />
            </GeometryDrawing.Pen>
          </GeometryDrawing>
          <GeometryDrawing Brush="Transparent">
            <GeometryDrawing.Geometry>
              <RectangleGeometry Rect="0, 0, 110, 110" />
            </GeometryDrawing.Geometry>
          </GeometryDrawing>
        </DrawingGroup>
      </DrawingBrush.Drawing>
    </DrawingBrush>
  </Window.Resources>

  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition Height="*"/>
      <RowDefinition Height="2*"/>
      <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="*"/>
      <ColumnDefinition Width="2*"/>
      <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Border Grid.Column="1" Grid.Row="1" BorderBrush="Yellow" BorderThickness="1">
      <Rectangle Fill="{StaticResource drawingBrush1}"/>
    </Border>
  </Grid>
</Window>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33761293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档