2013-02-02 21 views
5

ठीक है, मैंने अपने मस्तिष्क, Google और स्टैक ओवरफ्लो को इसे समझने की कोशिश कर लिया है, लेकिन इसे काफी कुछ नहीं मिल सकता है। मैं अपने डब्ल्यूपीएफ एप्लिकेशन (नवीनतम संस्करण) की पृष्ठभूमि में दो चीजें करने के लिए ड्रॉइंग ग्रुप के साथ ड्रॉइंगब्रश का उपयोग करने की कोशिश कर रहा हूं। एक, मैं अपनी पृष्ठभूमि में एक सूक्ष्म ढाल लगाने के लिए एक रेडियल ग्रेडिएंटब्रश रखना चाहता हूं। यह हिस्सा ठीक काम कर रहा है। दूसरा भाग जिसे मैं पूरा करने की कोशिश कर रहा हूं वह यह है कि मैं उस पृष्ठभूमि के हिस्से के रूप में विकर्ण रेखाओं को दोहराना चाहता हूं। मुझे पता है कि मैं इसे एक छवि के साथ कर सकता हूं, लेकिन बजाय ज्यामिति का उपयोग करूंगा, क्योंकि मैं सीखने और WPF मास्टर करने की कोशिश कर रहा हूं। यहां तक ​​कि मेरे पास अभी तक क्या है। रेडियल ठीक दिखाई देता है, लेकिन रेखाएं नहीं होती हैं। किसी भी सहायता की सराहना की जाएगी।मैं WPF में पृष्ठभूमि के रूप में दोहराने वाली विकर्ण रेखाएं कैसे बना सकता हूं?

<Style x:Key="WindowBackground" TargetType="Grid"> 
     <Setter Property="Background"> 
      <Setter.Value> 
       <DrawingBrush> 
        <DrawingBrush.Drawing> 
         <DrawingGroup> 
          <GeometryDrawing> 
           <GeometryDrawing.Brush> 
            <RadialGradientBrush GradientOrigin="0.5,0.5" RadiusX="0.5" RadiusY="0.5"> 
             <GradientStop Color="#EE9D40" Offset="0"/> 
             <GradientStop Color="#BF8230" Offset="1"/> 
            </RadialGradientBrush> 
           </GeometryDrawing.Brush> 
           <GeometryDrawing.Geometry> 
            <RectangleGeometry Rect="0,0,1,1"/> 
           </GeometryDrawing.Geometry> 
          </GeometryDrawing> 
          <GeometryDrawing> 
           <GeometryDrawing.Brush> 
            <DrawingBrush TileMode="Tile" Stretch="None" Viewbox="0,0,1,1" Viewport="0,0,25,25" ViewportUnits="Absolute"> 
             <DrawingBrush.RelativeTransform> 
              <TranslateTransform X="0" Y="0" /> 
             </DrawingBrush.RelativeTransform> 
             <DrawingBrush.Drawing> 
              <GeometryDrawing Brush="#20FFFFFF" Geometry="M10,0 22,0 12,25 0,22 Z" /> 
             </DrawingBrush.Drawing> 
            </DrawingBrush> 
           </GeometryDrawing.Brush> 
           <GeometryDrawing.Geometry> 
            <RectangleGeometry Rect="0,0,1,1"/> 
           </GeometryDrawing.Geometry> 
          </GeometryDrawing> 
         </DrawingGroup> 
        </DrawingBrush.Drawing> 
       </DrawingBrush> 
      </Setter.Value> 
     </Setter> 
    </Style> 
+2

मेरा उत्तर [यहां] देखें (http://stackoverflow.com/a/6434964/390278)। हम वहां एक ग्रिड खींचते हैं लेकिन आप एक ही अवधारणाओं को लागू कर सकते हैं। –

+0

यह मेरे लिए काफी काम नहीं कर रहा है, लेकिन मुझे लगता है कि आप इसके साथ कहां जा रहे हैं, इसलिए मैं इसे काम करने की कोशिश कर रहा हूं। उत्तर के लिए धन्यवाद! आप भी, सेड्रिक। मैं आपको बता दूँगा। –

उत्तर

16

इस चाल को काम करना चाहिए।

<LinearGradientBrush EndPoint="0,0" StartPoint="8,8" 
        MappingMode="Absolute" SpreadMethod="Repeat"> 
    <GradientStop Color="Black" Offset="0" /> 
    <GradientStop Color="Black" Offset="0.1" /> 
    <GradientStop Color="White" Offset="0.1" /> 
    <GradientStop Color="White" Offset="1" /> 
</LinearGradientBrush> 
+1

यह उल्लेखनीय है कि यदि आप एक व्यापक पट्टी (जैसे मैंने किया) चाहते हैं, तो बस दो "0.1" ऑफ़सेट मानों को बढ़ाएं। जैसे "0.5" आपको समान चौड़ाई के वैकल्पिक पट्टियां देगा। –

1

मुझे अंततः यह काम मिल गया, लेकिन एक समग्र मिश्रित ब्रश के साथ नहीं, जैसा कि मैं चाहता था। मैं निम्नलिखित शैलियों का प्रयोग किया:

<Style x:Key="WindowBackground" TargetType="Grid"> 
      <Setter Property="Background"> 
       <Setter.Value> 
        <RadialGradientBrush GradientOrigin="0.5,0.5" RadiusX="0.5" RadiusY="0.5"> 
         <GradientStop Color="#EAA659" Offset="0"/> 
         <GradientStop Color="#BF8230" Offset="1"/> 
        </RadialGradientBrush> 
       </Setter.Value> 
      </Setter> 
     </Style> 

     <Style x:Key="HatchOverlay" TargetType="Rectangle"> 
      <Setter Property="Fill"> 
       <Setter.Value> 
        <VisualBrush Opacity=".1" TileMode="Tile" Viewport="0,0,10,20" ViewportUnits="Absolute"> 
         <VisualBrush.Visual> 
          <Canvas> 
           <Path Stroke="#825821" Data="M 0 0 l 10 20" /> 
          </Canvas> 
         </VisualBrush.Visual> 
        </VisualBrush> 
       </Setter.Value> 
      </Setter> 
     </Style> 

फिर, रन टाइम पर इसे सक्षम करने, मैं अपने ग्रिड के पहले बच्चे के रूप में एक आयत जोड़ा तो जैसे:

<Grid Style="{StaticResource WindowBackground}"> 
    <Rectangle Style="{StaticResource HatchOverlay}"/>... 

यह मैं प्रभाव दे दी है कि मैं बाद में था। आपकी सहायता के लिए धन्यवाद; मैं आप में से प्रत्येक को वोट दूंगा।

1
  • एक क्षैतिज रेखा ब्रश घूर्णन कोने अंतराल से बचने के लिए प्रयास करें:

    <VisualBrush TileMode="Tile" 
    Viewport="0,0,5,5" ViewportUnits="Absolute" 
    Viewbox="0,0,5,5" ViewboxUnits="Absolute"> 
    <VisualBrush.Visual> 
        <Grid Background="White" Height="5"> 
         <Path Stroke="Black" Data="M 0 3 l 8 0" /> 
        </Grid> 
    </VisualBrush.Visual> 
    <VisualBrush.RelativeTransform> 
        <RotateTransform CenterX="0.5" CenterY="0.5" Angle="45" /> 
    </VisualBrush.RelativeTransform> 
    </VisualBrush>