Мой пользовательский WPF RIchTextBox не будет принимать пользовательский ввод, даже после установки IsReadOnly = false - PullRequest
1 голос
/ 03 февраля 2010

Я написал пользовательский Bindable RichText Box, чтобы я мог связываться со свойством Document.

Однако, как только я установил содержимое документа, единственная клавиатура, которую он принимает - клавиша возврата (???). Никакой другой ввод с клавиатуры не подтвержден (включая клавиши со стрелками).

Есть идеи?

Вот код моего класса BindableRTB:

Imports System.Windows.Documents
Imports System.Windows
Imports System.Windows.Controls

Public Class BindableRTB
    Inherits System.Windows.Controls.RichTextBox




Public Shared DocumentProperty As DependencyProperty = DependencyProperty.Register("Document", GetType(FlowDocument), _
                          GetType(BindableRTB), New FrameworkPropertyMetadata(Nothing, _
                            New PropertyChangedCallback(AddressOf OnDocumentChanged)))
Sub New()
    MyBase.new()
    Me.IsReadOnly = False
    Me.IsDocumentEnabled = True

End Sub

Public Overloads Property Document() As FlowDocument
    Get
        Return CType(MyBase.GetValue(DocumentProperty), FlowDocument)
    End Get
    Set(ByVal value As FlowDocument)
        MyBase.SetValue(DocumentProperty, value)
    End Set
End Property

Private Shared Sub OnDocumentChanged(ByVal d As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs)        Console.WriteLine("doc changed")
    Dim rtb As RichTextBox = CType(d, RichTextBox)
    rtb.Document = CType(e.NewValue, FlowDocument)
End Sub

Конечный класс

1 Ответ

1 голос
/ 03 февраля 2010

AH-ха!Решено.

То, что я не упомянул (потому что это не казалось уместным, это то, что этот элемент управления находится в окне WPF, запущенном из приложения WinForms)

При запуске моего WPFокно, мне нужно было вызвать ElementHost.EnableModelessKeyboardInterop () и передать ссылку на мое новое окно, например:

 Dim wpfEdit As New WpfEditor
 System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(wpfEdit)
    myParent.ShowNewWPFWindow(wpfEdit)
...