2017-09-19 10 views
0

J'essaie de permettre à l'utilisateur de modifier des parties spécifiques d'un texte (et seulement ces parties) en utilisant un contrôle RichTextBox.WPF RichTextBox édition tokenized

Mon approche consiste à utiliser TextBox contrôles contenus dans InlineUIContainer dans un FlowDocument. Le code ci-dessous montre ce que j'ai accompli jusqu'à présent:

<RichTextBox IsDocumentEnabled="True"> 
    <FlowDocument> 
     <Paragraph> 
      <InlineUIContainer > 
       <TextBox Text="Field" MinWidth="65"></TextBox> 
      </InlineUIContainer> 
      <InlineUIContainer> 
       <TextBlock Text="Some text..." ></TextBlock> 
      </InlineUIContainer> 
     </Paragraph> 
    </FlowDocument> 
</RichTextBox> 

Le problème est que l'utilisateur est en mesure de sélectionner les éléments dans le FlowDocument et les supprimer ... pire, ils peuvent modifier tout texte qui est partie d'un élément Run ou même couper/coller du texte dans le document. J'ai eu l'idée de définir le IsReadOnly="True" sur le RichTextBox mais cela désactive également les TextBoxes à éditer ... Aussi je pourrais manipuler le PreviewKeyDown mais qui ne peut pas manipuler chaque situation (c'est-à-dire: Clic droit et appui sur coller).

Je me demandais s'il y a une solution alternative ou même une bibliothèque alternative ou un contrôle tiers qui aide.

Répondre

2

Que diriez-vous régler la IsReadOnly propriété du TextBox-false et la propriété IsReadOnly du RichTextBox à true:

<RichTextBox IsDocumentEnabled="True" IsReadOnly="True"> 
    <FlowDocument> 
     <Paragraph> 
      <InlineUIContainer > 
       <TextBox Text="Field" MinWidth="65" IsReadOnly="False"></TextBox> 
      </InlineUIContainer> 
      <InlineUIContainer> 
       <TextBlock Text="Some text..." ></TextBlock> 
      </InlineUIContainer> 
     </Paragraph> 
    </FlowDocument> 
</RichTextBox> 
+0

ne peux pas croire cela fonctionne: D Merci. –

+0

Nice. Je ne m'attendais pas à ce que 'IsReadOnly' soit une propriété héritée, et pourtant c'est le cas. –