2010-10-19 21 views
16

में फोकस मैं WPFToolkit DataGrid के साथ एक समस्या हो रहा है जब एक स्तंभ CellTemplate और CellEditingTemplate दोनों की आपूर्ति अनुकूलित है। यदि आप नीचे एक नज़र डालते हैं, तो आप देखेंगे कि मेरे संपादन टेम्पलेट में एक CheckBox है। सभी एक कार्यात्मक अर्थ में ठीक है लेकिन जब सेल को संपादित करने के लिए F2 मारा जाता है, तो फोकस प्राप्त करने के लिए CheckBox के लिए किसी को भी टैब को हिट करना होगा। आदर्श रूप से, कोई मूल्य टॉगल करने के लिए F2 और SPACE को दबाएगा। वर्तमान में, किसी को एफ 2, टैब, स्पेस मारा जाना चाहिए। मैंने TabIndex को कोई फायदा नहीं हुआ है। मैं विचारों से बाहर चला रहा हूँ।डेटा ग्रिड के CellEditingTemplate और संपादन मोड

<WPFToolkit:DataGridTemplateColumn Header="Turn" 
            MinWidth="60"> 
    <WPFToolkit:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <Image Height="16"> 
       <Image.Style> 
        <Style TargetType="{x:Type Image}"> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding CanTurn}" Value="True"> 
           <Setter Property="Source" Value="/Images/16/Tick.png" /> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </Image.Style> 
      </Image> 
     </DataTemplate> 
    </WPFToolkit:DataGridTemplateColumn.CellTemplate> 

    <WPFToolkit:DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
      <CheckBox IsChecked="{Binding Path=CanTurn}" HorizontalAlignment="Center" HorizontalContentAlignment="Center" /> 
     </DataTemplate> 
    </WPFToolkit:DataGridTemplateColumn.CellEditingTemplate> 
</WPFToolkit:DataGridTemplateColumn> 

उत्तर

20

इस

<DataGridTemplateColumn.CellEditingTemplate> 
    <DataTemplate> 
     <CheckBox Name="checkbox" IsChecked="{Binding Path=CanTurn}" HorizontalAlignment="Center" HorizontalContentAlignment="Center" /> 
     <DataTemplate.Triggers> 
      <Trigger SourceName="checkbox" Property="IsVisible" Value="True"> 
       <Setter TargetName="checkbox" Property="FocusManager.FocusedElement" Value="{Binding ElementName=checkbox}" /> 
      </Trigger> 
     </DataTemplate.Triggers> 
    </DataTemplate> 
</DataGridTemplateColumn.CellEditingTemplate> 
+0

वर्क्स एक आकर्षण की तरह। धन्यवाद! – wpfwannabe

+0

धन्यवाद दस लाख बार! – Dabblernl

+0

अच्छा काम। हालांकि यह शुरुआत में काम नहीं करता था क्योंकि मैं डेटाग्रिड पर चयनित इटैम संपत्ति के साथ काम कर रहा था। हटा दिया गया और SelectionUnit = "सेल" बदल दिया और यह काम किया। – knockando

12

या इस प्रयास करें ...

<DataGridTemplateColumn Header="Long" IsReadOnly="False" Width="100"> 
    <DataGridTemplateColumn.CellEditingTemplate> 
    <DataTemplate> 
     <CheckBox FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}" IsChecked="{Binding Path=CanTurn}" HorizontalAlignment="Center" HorizontalContentAlignment="Center" /> 
    </DataTemplate> 
    </DataGridTemplateColumn.CellEditingTemplate> 
</DataGridTemplateColumn> 
+0

आप संभवतः इसे शैली में भी ले जा सकते हैं .. <स्टाइल एक्स: कुंजी = "माई स्टाइल" टार्गेट टाइप = "चेकबॉक्स"> <सेटर प्रॉपर्टी = "फोकस मैनेजर। फोकस्ड एलीमेंट" वैल्यू = "{बाध्यकारी सापेक्ष स्रोत = {सापेक्ष स्रोत स्वयं}} "/> – SteffenSH

+0

अच्छा काम। हालांकि यह शुरुआत में काम नहीं करता था क्योंकि मैं डेटाग्रिड पर चयनित इटैम संपत्ति के साथ काम कर रहा था। हटा दिया गया और SelectionUnit = "सेल" बदल दिया और यह काम किया। – knockando

+1

यह पंक्ति वास्तव में क्या करती है "{बाध्यकारी सापेक्ष स्रोत = {सापेक्ष स्रोत स्वयं}}" '? – Yola

0

आप संपादित पर ध्यान केंद्रित करने के लिए सेट और पाठ एक बाध्यकारी द्वारा दिए गए इस कोशिश का चयन करना चाहते हैं।

<DataGridTemplateColumn.CellEditingTemplate> 
    <DataTemplate> 
     <TextBox Text="{Binding Parameter0, Mode=TwoWay}" Loaded="TbLoaded" /> 
    </DataTemplate> 
</DataGridTemplateColumn.CellEditingTemplate> 

पीछे कोड:

private void TbLoaded(object sender, EventArgs e) 
{ 
    TextBox tb = sender as TextBox; 
    if (tb == null) return; 

    tb.SelectAll(); 
    FocusManager.SetFocusedElement(this, tb); 
} 
संबंधित मुद्दे