2015-11-17 25 views
0

我試圖創建DrawingBrush透明,無法弄清楚如何,設置此透明度:(這裏是XAML:DrawingBrush與transperancy

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

輸出是:

output

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

我怎麼能設置筆刷的背景顏色爲Transparent

如果我將它設置在XAML(GeometryDrawing Brush="Transparent")然後用刷子將獲得來自上控制Border和一切的背景顏色將是綠色

主要思想是在控制的中間Rectangle /刷

+0

我有點困惑你所期望的最終結果是什麼。你想要綠色的部分是完全透明的? – vcsjones

+0

@vcsjones紅色部分 – Jasper

+0

你用一個(部分)透明的Rectange填充帶有綠色背景的邊框。當然你會透過透明部分看到綠色背景。你的期望是什麼?你想達到什麼目的? – Clemens

回答

0

從您的評論:

DrawingBrush畫它僅在內部矩形,並設置所有T他'紅'區域透明

這不是WPF中的渲染模型的工作原理。當您在XAML中聲明要繪製的內容時,您正在描述要呈現的對象的集合。透明顏色(即具有0值的alpha值,如內置的Transparent值)不會「設置」它下面的像素爲透明的;它根本不渲染本身。在對象中使用透明顏色只需揭示該對象下的任何內容。

如果您想在邊框內繪製一個本身與透明像素相鄰的綠色框,那麼您根本不需要填充邊框(因爲這將通過透明像素顯示),並且您需要定義一個Drawing,確切地畫出你想要的。即一個透明的矩形來定義所需矩形的實際範圍,然後是一個更小的實心矩形。

例如:

<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

對不起 - 我必須在這裏混淆每個人:(在谷歌搜索很多我明白,我需要看看'OpacityMask'類似這樣的:https://msdn.microsoft.com/library /ms743320(v=vs.100).aspx#Anchor_6但你的回答完全在我的問題上。謝謝 – Jasper

+0

是的,你也可以使用'OpacityMask'。但是,請注意,相同的基本問題將適用:「OpacityMask」僅影響已設置的對象。例如,在上面,您可以在畫筆中只有一個綠色矩形,但應用不透明蒙版將外部十像素邊框設置爲透明。但是您仍然需要將此掩碼應用於'Rectangle',並且它不會影響在「Rectangle」下繪製的任何東西(即不會讓其顯示)。 –

相關問題