मैं वहाँ एक आसान तरीका है कि सफ़ेद बॉर्डर से छुटकारा पाने के लिए है नहीं लगता है:
यहाँ एक उदाहरण है। वास्तविक दिनचर्या जिसे DrawInnerBorder कहा जाता है और इसे बटन क्रॉम में ऑनरेंडर के भीतर से बुलाया जाता है।
protected override void OnRender(DrawingContext drawingContext)
{
Rect bounds = new Rect(0.0, 0.0, base.ActualWidth, base.ActualHeight);
this.DrawBackground(drawingContext, ref bounds);
this.DrawDropShadows(drawingContext, ref bounds);
this.DrawBorder(drawingContext, ref bounds);
// This one draws the white Rectangle
this.DrawInnerBorder(drawingContext, ref bounds);
}
private void DrawInnerBorder(DrawingContext dc, ref Rect bounds)
{
if ((base.IsEnabled || this.RoundCorners) && ((bounds.Width >= 4.0) && (bounds.Height >= 4.0)))
{
Pen innerBorderPen = this.InnerBorderPen;
if (innerBorderPen != null)
{
dc.DrawRoundedRectangle(null, innerBorderPen, new Rect(bounds.Left + 1.5, bounds.Top + 1.5, bounds.Width - 3.0, bounds.Height - 3.0), 1.75, 1.75);
}
}
}
हम देख सकते हैं, वहाँ इसे निष्क्रिय करने के लिए कोई संपत्ति है। आप बटन क्रोम पर IsEnabled="False"
और RoundCorners="False"
सेट करके या 3.99 की तरह चौड़ाई या ऊंचाई सेट करके और "व्हाइट बॉर्डर" चलाकर इसे सत्यापित कर सकते हैं।
अद्यतन
ButtonChrome की अंदरूनी सीमा आप अपने खुद के ButtonChrome जो इस संपत्ति कहते हैं बना सकते हैं अक्षम करने के लिए। दुर्भाग्यवश बटन क्रॉम को बंद कर दिया गया है ताकि हम इससे प्राप्त नहीं हो सकें। मैंने पूरी कक्षा की प्रतिलिपि बनाने और संपत्ति अक्षम करने योग्य बैंकर जोड़ने की कोशिश की और ऐसा लगता है कि यह काम कर रहा है।आप इसे इस
<local:MyButtonChrome ...
DisableInnerBorder="True">
यह सिर्फ नियमित ButtonChrome तरह काम करता है उसके अलावा की तरह उपयोग कर सकते हैं और आप भी अन्य गुण आदि है कि आप चाहते हो सकता है जोड़ सकते हैं। इस विधि में कमी हो सकती है जिसे मैंने नहीं सोचा है, लेकिन एक छोटे से परीक्षण के लिए यह ठीक काम करता है।
apperently कोड की 937 लाइनों के लिए इतने पर पोस्ट बहुत ज्यादा था :) मैं यहाँ MyButtonChrome.cs अपलोड किया गया: http://www.mediafire.com/?wnra4qj4qt07wn6
स्रोत
2010-12-29 13:01:12
आप इस कोड को कैसे प्राप्त कर सकते हैं? यह मुझे surpises :) –
@Nam Gi VU: मैंने .NET परावर्तक का उपयोग किया और प्रेजेंटेशनफ्रेमवर्क.एरो असेंबली डीबग करने के लिए जोड़ा। फिर मैंने यह पता लगाने के लिए ड्रॉइंग रूटीन के माध्यम से कदम उठाया कि यह कहां खींचा गया था और चेक किया गया था अगर इसे अक्षम करने का कोई तरीका था :) –
धन्यवाद मीलेक! 'बटन क्रॉम 'के बजाय' सीमा 'का उपयोग करने के आपके सुझाव के बारे में, मैं सामान्य बटन (माउस ओवर, दबाए गए, ect।) के सभी यूआई-प्रभाव को खो दूंगा। क्या आपके पास इसके लिए कोई काम है? –