2009-09-15 55 views
2

在WPF中,可以爲標籤指定助記符,並通過「目標」屬性告訴它要激活哪個控件。WPF:使目標屬性引用WindowsFormsHost中的控件

如果目標是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> 

回答

2

我不認爲這是可能的,至少在沒有一些額外的樣板代碼... WPF和Windows Forms有着完全不同的模型,以及Target財產的目的不是指WinForms控件。相反,我認爲你應該使用MaskedTextBox的WPF實現,就像this one(你可以在Google上找到很多其他的例子)。在WPF應用程序中使用WinForms控件很少是一個好主意,如果你可以避免它...

編輯:我只是檢查了文檔:它絕對不可能做你想做的,因爲Label.Target屬性的類型爲UIElement,和WinForms控制顯然不是UIElement小號...


UPDATE:OK,我誤解你的代碼...你引用WindowsFormsHost,這是一個UIElement。投票給我的人也是錯的;-)

我認爲問題是WindowsFormsHost需要按Alt-S而不是MaskedTextBox。這裏有一個快速的解決方法:

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中...

+0

這必須是WPF團隊的錯誤。這是一件很明顯的事情 - 如果你關注WindowsFormsHost,除了子控件集中之外還應該發生什麼?不過,我很高興有一個單線解決方法。 – 2009-09-16 01:00:37

+1

IMO,一個非常乾淨的解決方法不會涉及編寫代碼......這個人可以很容易地被包裝在一個可重用的附加屬性 – 2009-09-16 07:47:46

相關問題