2016-09-27 58 views
0

私はWPFのDataGridのための単一の編集クリックをしようとしてきたと私はstackoverflowの上のソリューションの多くを見たが取り組まれていない追加的なユースケースを持っている作品。私はスタイルトリガーをセットアップする必要がありますが、IsEditingを常に真に設定する必要はありません。私は2番目の条件に基づいてそれを必要とします。私が取り組んでいる問題は、それがセルごとに一度しか動作しないということです。WPF DataGridCellスタイルのトリガーは一度だけ

がほぼであるXAMLがあります。

<Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}"> 
    <Style.Triggers> 
     <MultiDataTrigger> 
     <MultiDataTrigger.Conditions> 
      <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsSelected}" Value="True" /> 
      <Condition Binding="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}, Path=DataContext.IsEditing}" Value="True" /> 
     </MultiDataTrigger.Conditions> 
     <Setter Property="IsEditing" Value="true" /> 
     </MultiDataTrigger> 
    </Style.Triggers> 
</Style> 

この問題は、セルごとに1回しか動作しないという問題があります。今、最初の条件をIsFocusedに基づいて変更すると、常に動作します。その問題は、明白な理由からセル内のテキストボックスをクリックできないということです。 IsSelectedがセルごとに1回しか動作しない理由については本当に迷っています。ちなみに私は、編集モードのうちの見方をするならば、各セルのために一度...それが再び動作するビューでもあるボタンを使用して、それを戻します。

誰もこの奇妙な動作が起こる理由についての洞察はありますか?

答えて

0

私はIsSelectedが機能しない理由を理解できませんが、動作するプロパティを見つけて、セルのテキストボックスに入力してみましょう。そのトリックは、IsKeyboardFocusWithinプロパティを使用することでした。ここでは期待どおりに動作完全なソリューションは、次のとおりです。

<DataGrid.CellStyle> 
    <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}"> 
     <Style.Triggers> 
     <MultiDataTrigger> 
      <MultiDataTrigger.Conditions> 
       <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsKeyboardFocusWithin}" Value="True" /> 
       <Condition Binding="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}, Path=DataContext.IsEditing}" Value="True" /> 
      </MultiDataTrigger.Conditions> 
      <Setter Property="IsEditing" Value="true" /> 
     </MultiDataTrigger> 
     </Style.Triggers> 
    </Style> 
</DataGrid.CellStyle>