2016-08-09 23 views
2

WPFで四角形の丸い角に色を設定したいと思います。ここで色付きの丸い角を持つ透明な長方形

は私がしたいのですが何の例です:

今の

enter image description here

、私はこのコードをしました:

<Rectangle x:Name="rect" Fill="Transparent" RadiusY="10" RadiusX="10"/> 

答えて

2

4つの別々のパス要素として4つの丸角の描画にもっと簡単かもしれません:

<Grid> 
    <Path HorizontalAlignment="Left" VerticalAlignment="Top" Fill="Red" 
      Data="M0,0 L10,0 A10,10 0 0 0 0,10Z"/> 
    <Path HorizontalAlignment="Right" VerticalAlignment="Top" Fill="Red" 
      Data="M0,0 L0,10 A10,10 0 0 0 -10,0Z"/> 
    <Path HorizontalAlignment="Left" VerticalAlignment="Bottom" Fill="Red" 
      Data="M0,0 L10,0 A10,10 0 0 1 0,-10Z"/> 
    <Path HorizontalAlignment="Right" VerticalAlignment="Bottom" Fill="Red" 
      Data="M0,0 L0,-10 A10,10 0 0 1 -10,0Z"/> 
</Grid> 
+0

これが長方形でどのように機能するか教えてください。 – lokusking

+0

なぜそれが長方形であるべきですか?色のついたコーナーで透明オーバーレイの種類を定義したいと思うようです。上記のグリッドを使用してください。 – Clemens

3

単純なアプローチ:

<Rectangle Fill="Red" Height="200" Width="200" > 
       <Rectangle.Clip > 
        <CombinedGeometry GeometryCombineMode="Exclude"> 
         <CombinedGeometry.Geometry1> 
          <RectangleGeometry Rect="0,0,200,200"/> 
         </CombinedGeometry.Geometry1> 
         <CombinedGeometry.Geometry2> 
          <EllipseGeometry x:Name="transparentRect" Center="100 100" RadiusX="120" RadiusY="120"/> 
         </CombinedGeometry.Geometry2> 
        </CombinedGeometry> 
       </Rectangle.Clip> 
      </Rectangle> 

矩形のサイズを変更する場合は、ジオメトリの矩形と半径値を調整する必要があります。これにより、適切な比率が表示されます。

私はこれを数分でやったので、改善の余地があるかもしれません。完全な満足のいくアプローチの

乾杯

EDIT

、私はあなたに2つのコンバータ

コード

public class RectangleConverter : IValueConverter { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { 
      var recta = value as Rectangle; 
      if (recta == null) return null; 
      return new Rect { X = 0, Y = 0, Height = recta.ActualHeight, Width = recta.ActualWidth }; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { 
      throw new NotImplementedException(); 
     } 
    } 

    public class ElipseGeoConverter : IValueConverter { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { 
      var recta = value as Rectangle; 
      if (recta == null) return null; 
      return new EllipseGeometry(new Point(recta.ActualWidth/2, recta.ActualHeight/2), recta.ActualWidth/3 * 2, 
       recta.ActualHeight/3 * 2); 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { 
      throw new NotImplementedException(); 
     } 
    } 

使用

を作りました
<Rectangle Fill="Red" Height="100" Width="100" > 
       <Rectangle.Clip > 
        <CombinedGeometry GeometryCombineMode="Exclude"> 
         <CombinedGeometry.Geometry1> 
          <RectangleGeometry> 
           <RectangleGeometry.Rect> 
            <Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type Rectangle}}" Converter="{StaticResource RectangleConverter}"></Binding> 
           </RectangleGeometry.Rect> 
          </RectangleGeometry> 
         </CombinedGeometry.Geometry1> 
         <CombinedGeometry.Geometry2> 
          <Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type Rectangle}}" Converter="{StaticResource GeoConverter}"/> 
         </CombinedGeometry.Geometry2> 
        </CombinedGeometry> 
       </Rectangle.Clip> 
      </Rectangle> 
+0

ええ、それは私が意味の事のようなものです。 –

+0

私は今あなたのコードをテストすることはできませんが、答えに感謝します。一見、それはupvotesに照らして働くように聞こえる... :) – Drarig29

+0

どのように矩形のActualWidthとActualHeightプロパティにCombinedGeometry RectとRadius-Valueをバインドできますか?私の問題は、私の四角形が現在グリッドにあり、その幅と高さがautoに設定されていることです。 – Drarig29

関連する問題