Nur-Lesen-Laufen-Elemente in einer WPF RichTextBox?
Ich kann ganz vorstellen, aber ich hätte schwören können, es war ein Weg, um einzelne Ausführen (oder Parapgraph) Elemente in einem RichTextBox-Steuerelement schreibgeschützt. Ich hätte auch geschworen, ich habe versucht, eine Methode für das tun dies selbst vor ein paar Wochen und war mit den Ergebnissen zufrieden - ich erinnere mich vage, es sah so etwas wie dieses:
<RichTextBox x:Name="richTextBox"
AcceptsTab="True"
AcceptsReturn="True"
FontFamily="Courier New"
FontSize="14">
<FlowDocument>
<Paragraph>
<Run IsReadOnly="True">I wish this was read-only!</Run>
</Paragraph>
</FlowDocument>
</RichTextBox>
Nun, ein paar Wochen später, ich gehe, um zu versuchen, zu machen, Führen Sie Elemente schreibgeschützt in einem RichTextBox-Steuerelement, nur zu finden, es scheint nicht möglich zu sein.
Dieser Beitrag auf der MSDN-Foren scheint zu bestätigen, dass.
Habe ich komplett das vorstellen? Oder gibt es eine Möglichkeit, das zu tun, was ich tun will?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, ich habe eine Lösung gefunden, die funktioniert für meinen Fall - aber möglicherweise nicht für jeder arbeiten, der will so etwas wie dieses. Es ist chaotisch, aber es macht den job.
Ich werde nicht akzeptieren, meine Antwort für ein paar Tage, nur für den Fall, jemand anderes hat einen besseren Weg, dies zu erreichen.
Hier gehen wir, zuerst die XAML:
Und der code hinter:
Meine Lösung beruht auf der Tatsache, dass, wenn ein
InlineUIContainer
ist aus der Benutzeroberfläche entfernt, es istUnloaded()
- Methode aufgerufen wird. An diesem Punkt, habe ich einfach erneut gelöschtInlineUIContainer
an der aktuellen Cursor-position.Wie bei jedem hack gibt es eine Reihe von Nachteilen. Die Nachteile, die ich zu finden bin, sind die folgenden:
InlineUIContainer
. Das ist eine kleine Einschränkung für diese Lösung.InlineUIContainer.Unloaded()
hält brennen jedesmal, wenn die EINGABETASTE gedrückt wird. Nicht lustig, aber es funktioniert für meinen Fall.Es ist keine tolle Lösung, aber ich denke, es wird für mich arbeiten. Wie ich schon sagte, ich werde nicht markieren Sie diese als Antwort auf meine eigene Frage noch - hoffentlich jemand anderes einen besseren Weg, dies zu tun.
Erreicht werden kann dies durch die Bearbeitung von zwei Falle: 1) OnMouseDown 2) OnPreviewKeyDown
IN Xaml, die wir haben, um es in folgender Weise: