2010-01-21 18 views
13

में कॉलम के बीच टैबस्टॉप अक्षम करें मेरे पास एक डब्लूएलएफ टूलकिट डाटाग्रिड है जो मल्टीप्ल कॉलम के साथ है। मैं एक व्यवहार प्राप्त करने की कोशिश कर रहा हूं जहां आप टैब का उपयोग करके ग्रिड में टैब कर सकते हैं, फिर एक टैब का उपयोग कर फिर से टैब आउट कर सकते हैं। जैसे मैं ग्रिड के सभी कॉलम या सेल्स के माध्यम से बस एक बार में और एक बार बाहर टैब नहीं करना चाहता हूं।एक WPF डेटाग्रिड

क्या कोई आसान समाधान है, मैंने TabStop को अक्षम करने (नीचे दिए गए कोड में दिखाए गए) को अक्षम करने और कॉलम पर TabNavigation को किसी भी को सेट करने के साथ-साथ सफलता के बिना टैबनेविगेशन को सेट करने का प्रयास किया है, लेकिन सफलता के बिना।

क्या मुझे कुछ याद आ रही है या क्या मुझे कोड में टैब-कुंजी को संभालने की आवश्यकता है?

 <my:DataGrid Name="datagrid" 
        AutoGenerateColumns="False" IsReadOnly="True" 
        CanUserAddRows="False" CanUserDeleteRows="False" 
        Background="White" 
        KeyboardNavigation.TabNavigation="Once"> 
      <my:DataGrid.Columns> 
       <my:DataGridTextColumn x:Name="ID" Header="ID" Width="1*" ></my:DataGridTextColumn> 
       <my:DataGridTextColumn x:Name="Ticker" Header="Ticker" Width="1*" KeyboardNavigation.TabNavigation="None"></my:DataGridTextColumn> 
       <my:DataGridTextColumn x:Name="OfficialName" Header="Name" Width="3*" KeyboardNavigation.TabNavigation="None"></my:DataGridTextColumn> 
      </my:DataGrid.Columns> 
     </my:DataGrid> 
+0

http://stackoverflow.com/questions/858938/wpf-toolkit-datagrid-custom-tabbing/1707920#1707920 – Bermo

उत्तर

17

ऐसा नहीं है कि KeyboardNavigation सीधे स्थापित करने DataGridTextColumn के पर काम नहीं करता दिलचस्प है। एक विकल्प जो काम करना चाहिए वह डेटाग्रिडसेल शैली स्थापित करना है।

<toolkit:DataGrid.CellStyle> 
    <Style TargetType="{x:Type toolkit:DataGridCell}"> 
     <Setter Property="KeyboardNavigation.IsTabStop" 
       Value="False" /> 
     <Style.Triggers> 
      <Trigger Property="IsSelected" 
        Value="True"> 
       <Setter Property="KeyboardNavigation.IsTabStop" 
         Value="True" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</toolkit:DataGrid.CellStyle> 

डेटाग्रिड से इसे संलग्न करने से यह सुनिश्चित होगा कि एक सेल केवल तभी है जब यह पहले से ही चुना गया हो। हालांकि, यदि आप पूर्ण पंक्तियों का चयन कर रहे हैं और डेटाग्रिड पर SelectionUnit = "Cell" सेट नहीं है, तो यह अभी भी वर्तमान में चयनित पंक्ति के प्रत्येक कॉलम के माध्यम से चक्रबद्ध होगा।

<toolkit:DataGrid.Resources> 

    <Style x:Key="SelectableCellStyle" 
      TargetType="{x:Type toolkit:DataGridCell}"> 
     <Setter Property="KeyboardNavigation.IsTabStop" 
       Value="False" /> 
     <Style.Triggers> 
      <Trigger Property="IsSelected" 
        Value="True"> 
       <Setter Property="KeyboardNavigation.IsTabStop" 
         Value="True" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

    <Style TargetType="{x:Type toolkit:DataGridCell}"> 
     <Setter Property="KeyboardNavigation.IsTabStop" 
       Value="False" /> 
    </Style> 

</toolkit:DataGrid.Resources> 

अब हम, डिफ़ॉल्ट रूप से और TabStop बंद करने से सभी DataGridCells लागू किया जा रहा एक शैली है और एक बंद शैली है कि चयन जब अनुमति देता है:

इसके बजाय, हम डेटा ग्रिड के भीतर संसाधनों के रूप में कई CellStyles बना सकते हैं सेल (या पूरी पंक्ति) का चयन किया जाता है। इस शैली को केवल एक कॉलम पर लागू करने से हमें पूरी पंक्ति और इसके सभी स्तंभों को चुनने के दौरान प्रभाव में एक ही एकल-टैब-प्रभाव मिलेगा।

<my:DataGridTextColumn x:Name="ID" Header="ID" Width="1*" CellStyle={StaticResource SelectableCellStyle}"/> 

यह भी डेटा ग्रिड अगर कुछ भी नहीं चुना जाता है, या पसंद किया जा सकता है जो न स्थिति आप में प्रयोग कर रहे हैं पर निर्भर करता है में टैब रोक है।

10

आप rmoore धन्यवाद। कॉलम के लिए टैब स्टॉप को अक्षम करने के लिए मैंने आपका जवाब लिया और इसे थोड़ा संशोधित किया;

 <my:DataGrid Name="datagrid" 
       AutoGenerateColumns="False" IsReadOnly="True" 
       CanUserAddRows="False" CanUserDeleteRows="False" 
       Background="White" 
       KeyboardNavigation.TabNavigation="Once" 
       SelectionUnit="FullRow"> 
     <my:DataGrid.Columns> 
      <my:DataGridTextColumn x:Name="ID" Header="ID" Width="1*" ></my:DataGridTextColumn> 
      <my:DataGridTextColumn x:Name="Ticker" Header="Ticker" Width="1*"> 
        <my:DataGridTextColumn.CellStyle> 
         <Style TargetType="{x:Type my:DataGridCell}"> 
          <Setter Property="KeyboardNavigation.IsTabStop" Value="False"></Setter> 
         </Style> 
        </my:DataGridTextColumn.CellStyle> 
      </my:DataGridTextColumn> 

      <my:DataGridTextColumn x:Name="OfficialName" Header="Name" Width="3*"> 
        <my:DataGridTextColumn.CellStyle> 
         <Style TargetType="{x:Type my:DataGridCell}"> 
          <Setter Property="KeyboardNavigation.IsTabStop" Value="False"></Setter> 
         </Style> 
        </my:DataGridTextColumn.CellStyle> 
      </my:DataGridTextColumn> 
     </my:DataGrid.Columns> 
    </my:DataGrid> 

तो चालें;

  1. चयनUnit = "FullRow" GUI जैसा दिखता है जैसे आप एक समय में एक पंक्ति (जैसे मैं चाहता था) कर रहा हूं।
  2. कॉलम में सेल स्टाइल जोड़कर मैं टैबस्टॉप को अक्षम करना चाहता हूं (लेकिन इसमें उनको शामिल नहीं करना जिन्हें मैं रोकना चाहता हूं) ने मुझे नियंत्रित करने की अनुमति दी कि कौन सी कोशिकाएं टैब-कुंजी नेविगेट करेंगी। - कीबोर्ड परविगेशन TabNavigation कॉलम पर परिभाषित होने पर प्रभाव नहीं पड़ता है।
संबंधित मुद्दे