2011-08-09 11 views
6

मैं सीमा से विरासत में नियंत्रण करना चाहता हूं और बस मुझे सीमा रेखा को डैश करने के लिए स्ट्रोक डैशएरे को विशिष्ट करने की अनुमति देता है।डब्ल्यूपीएफ डैशेड सीमा नियंत्रण

मैं 'google' सुझाए गए हैक्स i.e. आयताकार इत्यादि का उपयोग नहीं करना चाहता क्योंकि मैं सीमा नियंत्रण को लचीलापन चाहता हूं।

हालांकि, मुझे कस्टम नियंत्रण बनाने के साथ कोई अनुभव नहीं है और यह नहीं पता कि कहां से शुरू करना है?

क्या आप मुझे सही दिशा में इंगित कर सकते हैं

धन्यवाद!

+0

सीमा एक नियंत्रण नहीं है लेकिन एक फ्रेमवर्क एलिमेंट है। गुणों के साथ इसे हल करने में बेहतर देखो। –

+0

आपका क्या मतलब है? – Jon

+1

यहां सुझाए गए समाधानों में क्या गलत है? http://stackoverflow.com/questions/1048137/ –

उत्तर

12

फिर भी इष्टतम नहीं लेकिन कैसे एक VisualBrush

तुलना VisualBrush का उपयोग कर धराशायी Rectangle और SolidColorBrush

enter image description here

<Border BorderThickness="3,2,1,0" CornerRadius="10"> 
    <Border.BorderBrush> 
     <VisualBrush> 
      <VisualBrush.Visual> 
       <Rectangle StrokeDashArray="1.0 1.0" 
          Stroke="Red" 
          StrokeThickness="{Binding RelativeSource={RelativeSource AncestorType={x:Type Border}}, 
                Path=BorderThickness, 
                Converter={StaticResource ThicknessMaxConverter}}" 
          RadiusX="{Binding RelativeSource={RelativeSource AncestorType={x:Type Border}}, Path=CornerRadius.TopRight}" 
          RadiusY="{Binding RelativeSource={RelativeSource AncestorType={x:Type Border}}, Path=CornerRadius.BottomLeft}" 
          Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type Border}}, Path=ActualWidth}" 
          Height="{Binding RelativeSource={RelativeSource AncestorType={x:Type Border}}, Path=ActualHeight}"/> 
      </VisualBrush.Visual> 
     </VisualBrush> 
    </Border.BorderBrush> 
</Border> 

ThicknessMaxConverter साथ के रूप में मैट हैमिल्टन द्वारा लिंक से समाधान का उपयोग कर के बारे में

public class ThicknessMaxConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     Thickness thickness = (Thickness)value; 
     double horizontalMax = Math.Max(thickness.Left, thickness.Right); 
     double verticalMax = Math.Max(thickness.Top, thickness.Bottom); 
     return Math.Max(horizontalMax, verticalMax); 
    } 
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

धन्यवाद, यह वास्तव में अच्छी तरह से काम करता है! – Jon

0

क्षमा करें यह थोड़ी देर हो चुकी है, लेकिन यहाँ StrokeDashArray संपत्ति का उपयोग कर WPF के लिए एक समाधान है।

ellipse Ellipse = new Ellipse(); 
/*code to change ellipse size, margin, color, etc*/ 
ellipse.StrokeDashArray=new DoubleCollection(new double[] {4, 3}) 
//First number is the dash length, second number the dash gap 

मुझे एहसास है कि यह सी # कोड है और एक्सएमएल नहीं है, लेकिन संपत्ति अभी भी वही है। यदि आप अपने डैश के अधिक नियंत्रण चाहते हैं, तो here पर नियंत्रण के लिए अन्य "स्ट्रोक" गुणों का उपयोग करें।