2016-03-23 13 views
3

私はスタイルに "Fill"という名前のセッタープロパティがあり、値としてDrawingBrushを持っています。私はそれからDrawingBrushを抽出して、ビューモデルで使用したいと思います。ここには、私が持っているスタイルがあります。私は次のようにDrawingBrush抽出したいXamlのスタイルからセッター値プロパティを抽出するには?

<Style x:Key="ICON_STYLE" TargetType="Rectangle"> 
    <Setter Property="Fill"> 
     <Setter.Value> 
      <DrawingBrush Viewbox="0,0,39.125,39.125" ViewboxUnits="Absolute"> 
       <DrawingBrush.Drawing> 
        <GeometryDrawing Brush="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=uiEntityViews:ViewModel}, Path=MeSiteColor}" Geometry="F1M19.5625,0.999954C29.8144,0.999954 38.125,9.31053 38.125,19.5625 38.125,29.8142 29.8143,38.1249 19.5625,38.1249 9.31073,38.1249 1,29.8142 1,19.5625 1,9.31053 9.31064,0.999954 19.5625,0.999954z"> 
         <GeometryDrawing.Pen> 
          <Pen DashCap="Square" EndLineCap="Flat" LineJoin="Round" MiterLimit="10" StartLineCap="Flat" Thickness="2"> 
           <Pen.Brush> 
            <LinearGradientBrush EndPoint="0.849422,0.849423" StartPoint="0.150577,0.150578"> 
             <GradientStop Color="#FF657783" Offset="0"/> 
             <GradientStop Color="White" Offset="0.146"/> 
             <GradientStop Color="#FF2C4758" Offset="1"/> 
            </LinearGradientBrush> 
           </Pen.Brush> 
           <Pen.DashStyle> 
            <DashStyle/> 
           </Pen.DashStyle> 
          </Pen> 
         </GeometryDrawing.Pen> 
        </GeometryDrawing> 
       </DrawingBrush.Drawing> 
      </DrawingBrush> 
     </Setter.Value> 
    </Setter> 
</Style> 

-

if (resourceObject is Style) 
{ 
    Style iconStyle = resourceObject as Style; 
    var collections = iconStyle.Setters; 
    // How to extract iconBrush from collections???? 
    DrawingBrush iconBrush = ??? 
} 
+0

明確にするためには、あなたはコードでXAML定義を書き換える方法を尋ねるか、どのようにしていますコード内のその値を参照しますか? –

+0

コードでその値を参照する方法について質問しています。ありがとう。 – user109260

答えて

2

次はうまくいくかもしれない:

DrawingBrush iconBrush = GrabFirstDrawingBrushInStyle(resourceObject as Style); 

private DrawingBrush GrabFirstDrawingBrushInStyle(Style style) 
{ 
    if (style != null) 
    { 
     foreach (var setter in style.Setters.OfType<Setter>()) 
     { 
      if (setter.Value is DrawingBrush) 
       return (DrawingBrush)setter.Value; 
     } 
    } 
    return null; 
} 
関連する問題