2009-10-02 21 views
32

एक बार नियंत्रण को एक WPF ग्रिड में जोड़ा गया है, क्या प्रोग्राम और प्रोग्रामिंग इंडेक्स द्वारा उन्हें प्रोग्राम करने के लिए कोई तरीका है? की तर्ज पर कुछ:पंक्ति और कॉलम अनुक्रमणिका द्वारा WPF ग्रिड में प्रोग्रामेटिक रूप से नियंत्रण कैसे प्राप्त करें?

var myControl = (object)MyGrid.GetChild(int row, int column); 

... विधि काश मैं था जहां GetChild है!

उत्तर

57

इस के लिए निर्मित एक तरीका नहीं है, लेकिन आप इसे बच्चे संग्रह में देख कर आसानी से कर सकते हैं:

myGrid.Children 
     .Cast<UIElement>() 
     .First(e => Grid.GetRow(e) == row && Grid.GetColumn(e) == column); 
+6

हालांकि - यह पूरी संग्रह लौटने के लायक हो सकता है, तकनीकी रूप से, आपके पास एक सिंगल ग्रिड "सेल" में एक से अधिक तत्व हो सकते हैं, क्योंकि एचटी संलग्न गुण उस की जांच नहीं करते हैं। –

+0

धन्यवाद। यही वह दृष्टिकोण है जिसे मैं अब तक पीछा कर रहा हूं, जब तक कि मुझे मैचिन पंक्ति और कॉलम के साथ एक नियंत्रण नहीं मिलता है, लेकिन मुझे उम्मीद है कि वहां कुछ और प्रत्यक्ष होगा। – Mathias

+2

धन्यवाद, रीड, अच्छा बिंदु - जिसे पहले के बजाय कहां उपयोग करके आसानी से पूरा किया जा सकता है। – itowlson

8

This answer की मदद से आप

int rowIndex = Grid.GetRow(myButton); 

RowDefinition rowDef = myGrid.RowDefinitions[rowIndex]; 
+0

धन्यवाद, लेकिन यह नौकरी नहीं करता है क्योंकि मेरे पास मेरे बटन का संदर्भ नहीं है! – Mathias

+0

ओह मैं समझता हूँ। – Carlo

+0

यह वही है जो मैं ढूंढ रहा था। मेरे पास ऑब्जेक्ट का संदर्भ था, मुझे बस यह पता लगाने की आवश्यकता थी कि कौन सी पंक्ति और कॉल में था। धन्यवाद, कार्लो। – esteuart

0

बच्चे संपत्ति ग्रिड ऑब्जेक्ट आपको ग्रिड के सभी बच्चों (पैनल क्लास से) का संग्रह देगा।

ग्रिड में निर्देशांक प्राप्त करने तक, ग्रिड क्लास (GetRow() & GetColumn()) में स्थिर विधियों को देखें।

आशा है कि आपको सही दिशा में बंद कर देगा।

0

सिस्टम :: विंडोज :: नियंत्रण :: ग्रिड^myGrid = nullptr; सिस्टम :: विंडोज :: नियंत्रण :: उपयोगकर्ता नियंत्रण^pUserControl = nullptr;

myGrid = m_DlgOwnedObjAdmin->GrdProperties; 
if (myGrid->Children->Count > 0) 
{ 
    pUserControl = (System::Windows::Controls::UserControl^)myGrid->Children->default[0]; 
    if (pUserControl != nullptr) 
    { 
     if (bValue == true) 
      pUserControl->Visibility = System::Windows::Visibility::Visible; 
     else 
      pUserControl->Visibility = System::Windows::Visibility::Collapsed; 
    } 
}