代码之家  ›  专栏  ›  技术社区  ›  Andrew Shepherd

wpf:使目标属性引用WindowsFormsHost中的控件

  •  2
  • Andrew Shepherd  · 技术社区  · 15 年前

    在WPF中,可以为标签指定一个助记键,并告诉它使用“Target”属性激活哪个控件。

    如果目标是windowsformshost,则不起作用。有已知的解决办法吗?

    下面是一个例子。我试图让alt-s激活屏蔽文本框。

    <Label 
       Width="Auto" 
       Target="{Binding ElementName=tbStartTime}" 
       TabIndex="12">
       _Start Time:
    </Label>
    <WindowsFormsHost 
        Name="tbStartTime" 
        TabIndex="13">
     <wf:MaskedTextBox Name="wfStartTime"  Mask="90:00" />
    /WindowsFormsHost>
    
    1 回复  |  直到 15 年前
        1
  •  2
  •   Thomas Levesque    15 年前

    我认为这是不可能的,至少没有一些额外的样板代码…WPF和Windows窗体具有完全不同的模型,并且 Target 属性不是为引用WinForms控件而设计的。

    相反,我认为您应该使用 MaskedTextBox ,像 this one (你可以在谷歌上找到很多其他的例子)。在WPF应用程序中使用WinForms控件很少是一个好主意,如果你能避免它…

    编辑:我刚刚检查了文档:绝对不可能做你想做的,因为 Label.Target 属性为 UIElement 和WinForms控件显然不是 铀元素


    更新:好吧,我误读了你的代码…你引用的是 WindowsFormsHost ,这是一个 铀元素 . 投票给我的人也错了;—)

    我认为问题在于 窗口窗体列表 按ALT-S时获得焦点,而不是 带掩码的文本框 . 这里有一个快速的解决方法:

    XAML:

    <WindowsFormsHost 
        Name="tbStartTime" 
        TabIndex="13"
        GotFocus="tbStartTime_GotFocus">
     <wf:MaskedTextBox Name="wfStartTime"  Mask="90:00" />
    </WindowsFormsHost>
    

    代码落后:

        private void tbStartTime_GotFocus(object sender, RoutedEventArgs e)
        {
            tbStartTime.Child.Focus();
        }
    

    不管怎样,我以前的建议仍然是相关的:你最好使用一个wpf-maskedtextbox…