既存の Winforms プロジェクトを WPF に移行しようとしています。ただし、WinForm コントロールとして残す必要があるユーザー コントロールがいくつかあります。
WinForms UserControl を WPF ウィンドウに追加しました。これは、RichTextBox といくつかのボタンとラベルで構成されています。これは、さらにさまざまなユーザー コントロールにサブクラス化されます。
UserControl を WPF ウィンドウに埋め込むとレンダリングされますが、どのボタンも何もしていないように見えます。基になるプロセスが更新されると、たとえば RichTextBox はコンテンツを表示しません。それでも、デバッグでテキストボックスを調べると、コンテンツを見ることができます (ただし、これを表示するには「ベース」をクリックする必要があります)。
[私が見つけた違いの 1 つは、関連性はないかもしれませんが、このコントロールが WPF 上にあり、動作していない Visual Studio ではオブジェクトが「封印されている」と表示されますが、元の Winforms プロジェクトでは完全に動作しているときに表示されることです。封印されていません。]
ラベルのテキストを変更するコードを追加しましたが、更新も固く拒否しています。デバッグ モードでラベルを調べると、テキストが表示されます。
このスタック オーバーフローの質問は、同じ問題に対処している可能性があります: WindowsFormsHost Winform pdfviewer コントロールの問題
しかし、答えは私にはあまり意味がありませんでした:
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">
2 つの UserControls に使用する 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>
[私が気付いたもう 1 つのことは、ウィンドウの 1 つでリッチ テキスト ボックスをクリアするメソッドが、WPF の WindowsFormsHost の下で実行された場合、次のタイプのエラーを追い出し始めることです。作成されました。」
private void ClearRichTextBox(RichTextBox rtbToClear)
{
if (rtbToClear.IsHandleCreated)
{
if (rtbToClear.InvokeRequired)
{
this.Invoke(new Action<RichTextBox>(ClearRichTextBox), new object[] {rtbToClear});
return;
}
rtbToClear.Clear();
}
}
]
この動作の考えられる原因は何ですか? また、ユーザー コントロール内の要素を機能させるにはどうすればよいですか?