我想將現有的Winforms項目遷移到WPF中。但是:有一些用戶控件需要在WinForm控件中離開。WPF WindowsFormsHost Winform用戶控件顯示,但不起作用
我已經將WinForms UserControl添加到WPF窗口中。它由一個RichTextBox和一些按鈕和標籤組成。這被細分成各種進一步的用戶控制。
當我將UserControl嵌入到它呈現的WPF窗口中時 - 但沒有一個按鈕顯示出任何內容。當底層進程更新例如RichTextBox不顯示內容。然而,當我在調試中檢查文本框時,我可以看到內容(儘管我必須點擊'base'才能看到此內容。)
[我發現的一個區別 - 雖然它可能不相關 - 控件位於WPF上,而非工作的Visual Studio將該對象顯示爲「密封」,但在原始Winforms項目完全運行時它不會顯示爲密封。 ]
我添加了代碼來更改標籤中的文本 - 他們也堅決拒絕更新:如果我在調試模式下檢查標籤,我又可以看到文本。
這個堆棧溢出的問題可以解決同一個問題: WindowsFormsHost Winform pdfviewer control problem
但得到的答覆並沒有做出很大的意義對我說: 它提到更換
new Window { Content = CreateContent(), Title = title }.Show();
但是,這不是一個一段代碼我承認:我使用的是XAML文件的代碼後面,這就是所謂的最高使用
System.Windows.Application app = new System.Windows.Application();
app.Run(new FormWPFApp());
(其中FormWPFApp是我對WPF窗口名稱)
這裏是XAML頭: -
<Window x:Class="ZedApp.FormWPFApp"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Printers="clr-namespace:ZedApp.UserControls.Printers"
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
Title="Conversion version" Height="661" Width="1559" Loaded="Window_Loaded">
下面是我用兩個用戶控件的XAML(他們都來自同一個基類繼承) : -
<WindowsFormsHost Height="430" HorizontalAlignment="Left" Margin="192,32,0,0" Name="windowsFormsHostTicketPrinter" VerticalAlignment="Top" Width="324" Grid.Row="1" Grid.Column="1">
<Printers:TicketPrinter x:Name="ticketPrinter">
</Printers:TicketPrinter>
</WindowsFormsHost>
<WindowsFormsHost Height="430" HorizontalAlignment="Left" Margin="522,32,0,0" Name="windowsFormsHostJournalPrinter" VerticalAlignment="Top" Width="324" Grid.Row="1" Grid.Column="1">
<Printers:JournalPrinter x:Name="journalPrinter">
</Printers:JournalPrinter>
</WindowsFormsHost>
[我注意到另一件事是,清除富文本框的方法在Windows中的一個開始,如果在WPF WindowsFormsHost下運行蹬出以下類型的錯誤 - 「調用或BeginInvoke不能被控制直到t他已經創建了窗口句柄。「
private void ClearRichTextBox(RichTextBox rtbToClear)
{
if (rtbToClear.IsHandleCreated)
{
if (rtbToClear.InvokeRequired)
{
this.Invoke(new Action<RichTextBox>(ClearRichTextBox), new object[] {rtbToClear});
return;
}
rtbToClear.Clear();
}
}
]
什麼是此行爲可能原因和什麼,我需要做的就是在用戶控制工作中的元素?
你可以發佈你的XAML嗎? – RichardOD