WPF - 从文本框

时间:2016-03-02 23:04:46

标签: wpf vb.net mnemonics

刚刚发现导致HTML编辑器在键盘上使用某个字母时抛出玩具的原因......

在同一页面上有一些文本框,其中包含html页面名称,标题,导航URL,菜单文本......如果其中一个文本框包含带下划线的文本(例如' Test_Page')那封信' P'将无法在HTML编辑器中运行。我猜测(并且可能不在这里,因为我没有认为textbox.txt可以做到这一点,这与Label.content不同)WPF正在接受文本输入并将其用作助记键。我要知道将RecognisesAccessKey设置为false可以解决它,但无法找到添加该属性或访问ContentPresenter的方法...

这是我用来创建控件的类,理想情况下想在此处设置

Public Class TBx
Inherits TextBox
Public Shared IsNewRecordProperty As DependencyProperty = DependencyProperty.Register("IsNewRecord", GetType(Boolean), GetType(TBx), New PropertyMetadata(New PropertyChangedCallback(AddressOf IsNewRecordChanged)))
Public Property IsNewRecord As Boolean
    Get
        Return GetValue(IsNewRecordProperty)
    End Get
    Set(value As Boolean)
        SetValue(IsNewRecordProperty, value)
    End Set
End Property

Protected Overrides Sub OnInitialized(e As System.EventArgs)
    MyBase.OnInitialized(e)
    VerticalAlignment = Windows.VerticalAlignment.Center
    HorizontalAlignment = Windows.HorizontalAlignment.Left
    BorderBrush = New SolidColorBrush(Colors.Silver)
    Height = 22
    SpellCheck.IsEnabled = True
    UndoLimit = 0

    If IsNewRecord = True Then
        BorderThickness = New Thickness(1)
        IsReadOnly = False
        Background = New SolidColorBrush(Colors.White)
    Else
        BorderThickness = New Thickness(0)
        IsReadOnly = True
        Background = New SolidColorBrush(Colors.Transparent)
    End If

End Sub

Private Shared Sub IsNewRecordChanged(sender As DependencyObject, e As DependencyPropertyChangedEventArgs)
    Dim vControl As TBx = TryCast(sender, TBx)
    Dim vBoolean As Boolean = e.NewValue
    If vBoolean = True Then
        vControl.BorderThickness = New Thickness(1)
        vControl.IsReadOnly = False
        vControl.Background = New SolidColorBrush(Colors.White)
    Else
        vControl.BorderThickness = New Thickness(0)
        vControl.IsReadOnly = True
        vControl.Background = New SolidColorBrush(Colors.Transparent)
    End If
End Sub
End Class

谢谢

1 个答案:

答案 0 :(得分:0)

无法从课程中找到一种简单的方法,但这适用于页面

Dim CP As New ContentPresenter
            CP.RecognizesAccessKey = False

然后将TextBox添加到ContentPresenter

Case 1
                    vLabel.Text = "Page Name"

                    With vTB
                        .Width = 200
                        .Name = vName & "PageNameTB"
                        .ToolTip = "This is the short name for the page"
                        .IsNewRecord = IsNewRecord
                    End With
                    CP.Content = vTB

将CP添加到网格

  RegisterControl(SecurePage_Grid, vTB)

            Grid.SetColumn(vLabel, 0)
            Grid.SetRow(vLabel, i)

            If i = 1 Then
                Grid.SetRow(CP, i)
                Grid.SetColumn(CP, 1)
            Else
                Grid.SetRow(vTB, i)
                Grid.SetColumn(vTB, 1)
            End If

            vGrid.Children.Add(vLabel)
            If i = 1 Then
                vGrid.Children.Add(CP)
            Else
                vGrid.Children.Add(vTB)
            End If