2017-02-03 14 views
1

サービスからのデータモデルの詳細に基づいてデータエントリWPF DataGridを動的に作成しています。私がするこれ​​らのことの1つは、ユーザが例えば、から選択できるコンボボックスを定義することである。国GridColumn.CellTemplateを使用しているときにタブのフォーカスが機能しない

私はプログラム的にDataTemplateを定義し、次のように定義された実際のDataTemplateでGridColumn.CellTemplate

colToAdd = new GridColumn 
{ 
    FieldName = field.name, 
    Binding = new Binding { Path = new PropertyPath(string.Format("Order.OrderData[{0}]", field.name)), Mode = BindingMode.TwoWay }, 
    Header = GridCreationHelper.GenerateColumnHeader(field), 
    HeaderToolTip = string.Format("Order - {0}", myTI.ToTitleCase(field.name.ExpandTitleCaseToWords())), 
    VisibleIndex = colIndex, 
    AllowEditing = DefaultBoolean.True, 
    AllowGrouping = DefaultBoolean.True, 
    CellTemplate = GridCreationHelper.GenerateComboBoxDataTemplate(ViewModel.SelectedOrderType, field.name, View.Name, ViewModel.ComboBoxValues[ViewModel.SelectedOrderType][field.name].Count), 
    HeaderStyle = GridCreationHelper.IsFieldMandatory(field) ? View.Resources["OrderEntryMandatoryHeaderStyle"] as Style : null, 
    AllowFocus = true 
}; 

に設定しています:

public static DataTemplate GenerateComboBoxDataTemplate(OrderType orderType, string columnName, string viewName, int comboBoxCount) 
    { 
     string selectedIndexMarkup = comboBoxCount == 1 ? " SelectedIndex=\"0\"" : string.Empty; 

     string markup = 
      string.Format(@"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" 
       xmlns:dxe=""http://schemas.devexpress.com/winfx/2008/xaml/editors"" xmlns:Key=""ComboBoxEditDataTemplate""> 
      <dxe:ComboBoxEdit xmlns:Name=""PART_Editor"" IsTabStop=""True"" Focusable=""True"" ImmediatePopup=""True"" IsTextEditable=""False"" SelectAllOnGotFocus=""True"" 
           ItemsSource=""{{Binding Path=ViewModel.ComboBoxValues[{0}][{1}], ElementName={2}}}"" SelectedItem=""{{Binding Path=RowData.Row.Order.OrderData[{1}]}}""{3} /> 
     </DataTemplate>", orderType, columnName, viewName, selectedIndexMarkup); 

     StringReader stringReader = new StringReader(markup); 
     XmlReader xmlReader = XmlReader.Create(stringReader); 
     return XamlReader.Load(xmlReader) as DataTemplate; 
    } 

行を通じてタブ移動時にこれが期待通りに動作しますが、キーボードフォーカスは、上記のように定義されたコンボボックスに決して設定されません。ドロップダウンを選択できるようにするには、マウスを使用する必要があります。

ご協力いただければ幸いです。

+0

@ user1892538回答が削除された理由や削除された理由がわかりません。 –

+0

申し訳ありませんが、私はそれがあなたのために大丈夫ではないと思った...それは機能しましたか?ちょうどの場合、plsは他人が知ることができるようにそれを受け入れる、ありがとう –

答えて

0

DevExpress社のan old issueに関連すると思われる:我々は、IsTabStopプロパティ は、あなたのコード内でTrueに設定されているため、問題が発生することを見出した

。ご存じのように、私たちのエディタは コンポジットコントロールで、内部に標準のTextBoxコントロールが含まれています。 キーボードの操作をサポートするために、 "外側"コントロールのIsTabStopプロパティをエディタがキーボードフォーカスを受け取るとFalseに設定し、 のフォーカスを "内部"コントロール(TextBox)に移動します。次のトリガーは、この目的のために使用 です:

<Style TargetType="{x:Type dxe:BaseEdit}"> 
     <Trigger Property="IsKeyboardFocusWithin" Value="True"> 
      <Setter Property="IsTabStop" Value="False"/> 
     </Trigger> 
</Style> 

そして、彼らのフォーラムからの提案は

である私たちは、 コントロールのレベルでこの問題を解決するための許容可能な方法を発見していません。唯一の解決策は、 にIsTabStopプロパティの値をTrueに設定しないことです(デフォルトではTrue)。私は です。変更されたプロジェクトには、必要な変更が加えられています。

詳細については、その投稿からDXSample.zipをダウンロードできます。

関連する問題