2012-01-26 17 views
6

पर सेल की बाध्यकारी पंक्ति और कॉलम अनुक्रमणिका मैं एक WPF डेटाग्रिड के भीतर अलग-अलग कोशिकाओं को स्वचालन आईडी देने की प्रक्रिया में हूं, लेकिन मैंने थोड़ा सा झटका लगाया है। मैंने ग्रिड (पंक्ति सूचकांक और कॉलम अनुक्रमणिका) में अपनी स्थिति के अनुसार कोशिकाओं का नामकरण करने का प्रयास करने का निर्णय लिया है। एक यूआई निरीक्षक का उपयोग करना और प्रश्न में DataGridCells में से एक पर प्रकाश डाला से पता चलता निम्नलिखित गुण:एक्सएएमएल - स्वचालन आईडी

GridItem.Row: 2 GridItem.Column: 0

... जो मुझे विश्वास है कि मैं बंधन के माध्यम से इन गुणों का उपयोग कर सकते हैं। हालांकि, मैंने इस बारे में इंटरनेट के साथ मिलकर पिछले कुछ दिनों का बेहतर हिस्सा बिताया है, लेकिन इसके बारे में कुछ भी नहीं मिला है।

<DataGrid.CellStyle> 
    <Style TargetType="{x:Type DataGridCell}"> 
    <Setter Property="AutomationProperties.AutomationId"> 
     <Setter.Value> 
     <MultiBinding StringFormat="cell:{0}-{1}"> 
      <Binding ??? /> 
      <Binding ??? /> 
     </MultiBinding> 
     </Setter.Value> 
    </Setter> 
    </Style> 
</DataGrid.CellStyle> 

इन गुणों के लिए इस तरह के एक पथ मौजूद है:

वर्तमान XAML कोड के रूप में (प्लेसहोल्डर '???' कर रहे हैं) इस प्रकार है? या व्यक्तिगत कोशिकाओं को अद्वितीय स्वचालन आईडी देने के लिए एक और तरीका मौजूद है? मैं डब्ल्यूपीएफ और एक्सएएमएल के साथ बहुत अनुभवी नहीं हूं इसलिए किसी भी पॉइंटर्स की सराहना की जाती है।

अग्रिम धन्यवाद।

+0

मुझे यकीन है कि नहीं, लेकिन कोशिश <बाइंडिंग पथ = "GridItem.Column" RelativeSource = { सापेक्ष स्रोत मोड = सेल्फ} /> – Eyjafjallajokull

+0

अपनी स्निपेट डालने का प्रयास किया लेकिन दुर्भाग्य से यह सही परिणाम नहीं मिला (स्वचालन आईडी किसी भी कारण से खाली है)। जवाब देने के लिए धन्यवाद - मैं चीज़ों के साथ खेलना जारी रखूंगा और अगर मैं किसी चीज़ पर ठोकर खाऊंगा तो पोस्ट करूंगा। – CSD

उत्तर

6

यह अंत में काम करने के लिए मिला है। यहां समाधान पोस्ट करना ताकि अन्य लाभ उठा सकें।

कोड के पीछे (http://gregandora.wordpress.com/2011/01/11/wpf-4-datagrid-getting-the-row-number-into-the-rowheader/ बंद आधारित):

Private Sub DataGrid_LoadingRow(sender As System.Object, e As System.Windows.Controls.DataGridRowEventArgs) 
    e.Row.Tag = (e.Row.GetIndex()).ToString() 
End Sub 

और XAML:

<DataGrid ... LoadingRow="DataGrid_LoadingRow" > 

<DataGrid.ItemContainerStyle> 
    <Style TargetType="{x:Type DataGridRow}"> 
    <Setter Property="AutomationProperties.AutomationId"> 
     <Setter.Value> 
     <MultiBinding StringFormat="Row{0}"> 
      <Binding Path="(DataGridRow.Tag)" 
        RelativeSource="{RelativeSource Mode=Self}" /> 
     </MultiBinding> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="AutomationProperties.Name"> 
     <Setter.Value> 
     <MultiBinding StringFormat="Row{0}"> 
      <Binding Path="(DataGridRow.Tag)" 
        RelativeSource="{RelativeSource Mode=Self}" /> 
     </MultiBinding> 
     </Setter.Value> 
    </Setter> 
    </Style> 
</DataGrid.ItemContainerStyle> 

... 

<DataGrid.CellStyle> 
    <Style> 
    <Setter Property="AutomationProperties.AutomationId"> 
     <Setter.Value> 
     <MultiBinding StringFormat="cell{0}Col{1}"> 

      <!-- bind to row automation name (which contains row index) --> 
      <Binding Path="(AutomationProperties.Name)" 
        RelativeSource="{RelativeSource AncestorType=DataGridRow}" /> 

      <!-- bind to column index --> 
      <Binding Path="(DataGridCell.TabIndex)" 
        RelativeSource="{RelativeSource Mode=Self}" /> 

     </MultiBinding> 
     </Setter.Value> 
    </Setter> 
    </Style> 
</DataGrid.CellStyle> 

... 

</DataGrid> 
1

ठीक है, मैं इसे देख लिया है (datagrid के साथ लेकिन ग्रिड के साथ नहीं है, यह एक ही होना चाहिए), और यह काम करता है:

<AutomationProperties.AutomationId> 
    <MultiBinding StringFormat="{}{0} - {1}"> 
      <Binding Path="(Grid.Row)" RelativeSource="{RelativeSource Mode=Self}" /> 
      <Binding Path="(Grid.Column)" RelativeSource="{RelativeSource Mode=Self}" /> 
     </MultiBinding> 
</AutomationProperties.AutomationId> 
+0

अब मुझे ग्रिड में सभी कोशिकाओं के लिए स्वचालन आईडी के रूप में "0-0" मिल रहा है। हालांकि मेरे पास पहले की तुलना में यह एक बड़ा कदम है - आपकी मदद के लिए धन्यवाद! – CSD

+0

डेटाग्रिड और ग्रिड कक्षाओं के कुछ अन्य गुणों के माध्यम से देखा गया ... कोशिश की गई <<बाध्यकारी पथ = "(डेटाग्रिड। चयन किए गए इंडेक्स)" सापेक्ष स्रोत = "{सापेक्ष स्रोत मोड = स्वयं}" /> 'लेकिन सभी कोशिकाओं के लिए -1 प्राप्त हुआ। – CSD

+0

क्या आप कृपया मुझे बता सकते हैं कि आपकी संपत्ति कहां है "GridItem.Row" और "GridItem.Column" आते हैं? मैंने स्नूप का उपयोग करके इस समस्या का निरीक्षण करने के लिए डेटाग्रिड के साथ टेस्ट प्रोजेक्ट बनाया है, लेकिन मुझे इन गुणों को नहीं देखा गया है। – Eyjafjallajokull