2010-08-20 20 views
0

En utilisant le code ci-dessous dans un DataGridTemplateColumn du DataGrid, mes boutons de mise en forme sont désactivées (grisées). Les boutons de formatage sont seulement activés lorsqu'ils sont mis dans une barre d'outils.EditingCommands du WPF RichTextBox lâche sa liaison quand ils ne sont pas mis dans un ToolBar

Lorsque les boutons sont placés dans un ToolBar je ne l'ont pas besoin CommandTarget. Donc, quand je les ai mis à l'extérieur d'une barre d'outils, certains pourraient penser qu'il doit fonctionner avec CommandTarget, mais ce n'est pas le cas, pourquoi?

<Button Content="K" CommandTarget="{Binding ElementName=RTFBox}" Command="EditingCommands.ToggleItalic"/> 
<Button Content="U" CommandTarget="{Binding ElementName=RTFBox}" Command="EditingCommands.ToggleUnderline" /> 


    <DataGridTemplateColumn.CellTemplate> 
           <DataTemplate> 
            <Helper:RichTextBox VerticalScrollBarVisibility="Auto" x:Name="RTFBox" LostFocus="RTFBox_LostFocus" Text="{Binding Notes, UpdateSourceTrigger=PropertyChanged}" > 
             <Helper:RichTextBox.TextFormatter> 
              <Helper:RtfFormatter /> 
             </Helper:RichTextBox.TextFormatter> 
             <RichTextBox.CommandBindings> 
              <CommandBinding Command="EditingCommands.ToggleUnderline"/> 
              <CommandBinding Command="EditingCommands.ToggleItalic"/> 
             </RichTextBox.CommandBindings> 
            </Helper:RichTextBox> 
           </DataTemplate> 
          </DataGridTemplateColumn.CellTemplate> 

Répondre

0

La barre d'outils a FocusManager.IsFocusScope = "Vrai" qui est par défaut faux.

Mettez juste FocusManager.IsFocusScope = "Vrai" dans le panneau qui contient les boutons. CommandTarget est de limiter les boutons s'ils sont dans un panneau IsFocusScope = "True" - par exemple. si vous avez deux RichTextBox et que vous voulez seulement que les boutons fonctionnent sur l'un d'entre eux.