2009-01-17 10 views
7

मैं बस एक दूसरे के शीर्ष पर दो ग्रिड है। दुनिया की एक स्थिति को देखते हुए, मैं ग्रिड ए को शीर्ष पर होना चाहता हूं, दुनिया का एक और राज्य दिया, मैं ग्रिड बी को शीर्ष पर रखना चाहता हूं। पुराने दिनों में हम सिर्फ ग्रिड को कॉल कर सकते थे। ब्रिंगटॉफ्रंट(), लेकिन यह अब अस्तित्व में नहीं है, और मैं ऐसा करने के लिए किसी भी तरह से नहीं समझ सकता।मैं एक आइटम को wpf में सामने कैसे ला सकता हूं?

सबसे अच्छा मैं समझ सकता हूं, मुझे इस कार्यक्षमता की अनुमति देने के लिए अपनी खुद की कस्टम कक्षाएं बनाने की आवश्यकता है, लेकिन ऐसा लगता है कि यह इतना आसान होता है।

उत्तर

11

आप एक पैनल में तत्वों के प्रदर्शन का क्रम बदलने के लिए Panel.ZIndex संपत्ति का उपयोग कर सकते

+0

प्रश्न ऑर्डर बदलने के बारे में नहीं था, लेकिन सामने लाया गया, निश्चित रूप से, मौजूदा maxOrder को स्थापित करने में, और इस आदेश को बड़ा स्थापित करने में शामिल है ... – serhio

3

है आप Z सूचकांक संपत्ति का उपयोग करने के लिए है, और कोई बनाया देखते हैं क्योंकि जो काम आप चाहते हैं उसे करने के लिए, मैंने अपना खुद का बना दिया। जेड मान जितना अधिक होगा, नियंत्रण के सामने 'करीब' है। तो आप मनमाने ढंग से उच्च जेड मान सेट किए बिना अपना नियंत्रण शीर्ष पर रखना चाहते हैं।

तो यहां एक छोटा सा कार्य है जिसे मैंने स्वयं ठीक करने के लिए लिखा है। नोट: यह मान लें कि आप कैनवास और उपयोगकर्ता नियंत्रण का उपयोग कर रहे हैं। तो यदि आपको अपना मामला नहीं है तो आपको इसे थोड़ा सा अनुकूलित करने की आवश्यकता हो सकती है।

असल में इसे नियंत्रण के सूचकांक को स्थानांतरित करने के लिए मिल जाएगा, तो वर्तमान में इसके ऊपर कोई भी नियंत्रण 1 से नीचे जाएगा और स्थानांतरित करने के लिए नियंत्रण शीर्ष पर रखा जाएगा (पदानुक्रम बनाए रखने के लिए)।

static public void BringToFront(Canvas pParent, UserControl pToMove) 
    { 
      try 
      { 
       int currentIndex = Canvas.GetZIndex(pToMove); 
       int zIndex = 0; 
       int maxZ = 0; 
       UserControl child; 
       for (int i = 0; i < pParent.Children.Count; i++) 
       { 
        if (pParent.Children[i] is UserControl && 
         pParent.Children[i] != pToMove) 
        { 
         child = pParent.Children[i] as UserControl; 
         zIndex = Canvas.GetZIndex(child); 
         maxZ = Math.Max(maxZ, zIndex); 
         if (zIndex > currentIndex) 
         { 
          Canvas.SetZIndex(child, zIndex - 1); 
         } 
        } 
       } 
       Canvas.SetZIndex(pToMove, maxZ); 
      } 
      catch (Exception ex) 
      { 
      } 
    } 
+0

zzzzz ... कोई भी कैनवास का उपयोग नहीं करता – user1034912

-1

किसे यह चिंता का विषय हो सकता है:

ZIndex संपत्ति है 0 डिफ़ॉल्ट रूप से है, तो आप (मेरे जैसे) 1 से अधिक तत्व के साथ एक कैनवास (> मेरे मामले में 4000 आकृतियाँ) है, सभी के पास ZIndex = 0 होगा, इसलिए इस विधि के साथ ZIndexes को बदलने से कोई प्रभाव नहीं पड़ेगा।

इसके लिए काम करने के लिए, मैंने सभी तत्वों को बनाने के बाद ZIndexes को ज्ञात मान पर सेट किया है, इसलिए उन्हें बाद में आदेश दिया जा सकता है।

int zIndex = 0; 
    for (int i = 0; i < canvas.Children.Count; i++) { 
     UIElement child = canvas.Children[i] as UIElement; 
     if (canvas.Children[i] is UIElement) Canvas.SetZIndex(child, zIndex++); 
    } 
1

इसके बजाय दो ग्रिड स्टैकिंग की, दृश्यता गुण तो ग्रिड आप उपयोग नहीं कर रहे संकुचित हो जाता है बदल जाते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे