WinForms アプリの ElementHost でホストしようとしている WPF コントロールに問題があります。このコントロールは、もともと別のテスト プロジェクト (WPF アプリ) で開発したルックレス カスタム コントロールです。そこでは明らかに正常に動作しますが、私の WinForms アプリでは、ElementHost が表示される空白の灰色のボックスしか表示されません。
ElementHost を作成、設定、および親 Control に追加するための C# コードを次に示します。
// This is my WPF control
m_TabHostPanel = new TabHostPanel();
m_ElementHost = new ElementHost
{
Child = m_TabHostPanel,
Dock = DockStyle.Top,
Height = 34
};
this.Controls.Add( m_ElementHost );
親コントロールには、必要に応じて実行時に追加および削除される他の WinForms コントロールが含まれます。これらはすべて、Dock を DockStyle.Fill に設定して個別にホストされています。したがって、追加するたびに、ElementHost を Z オーダーの後ろに送信して、正しくレンダリングされるようにします。
m_ElementHost.SendToBack();
したがって、空域の問題などに遭遇していないことはわかっています。
私が疑問に思ったことの 1 つは、元のプロジェクトでは、すべてのルックレス コントロールのスタイルが App.xaml のアプリケーションのリソース ディクショナリに次のようにマージされたことです。
<Application x:Class="WpfTestApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Application/UserInterface/DataTemplates/TabModelDataTemplate.xaml"/>
<ResourceDictionary Source="Application/UserInterface/Styles/HoverablePressableButtonStyle.xaml"/>
<ResourceDictionary Source="Application/UserInterface/Styles/MiniControlButtonStyle.xaml"/>
<ResourceDictionary Source="Application/UserInterface/Styles/TabCloseButtonStyle.xaml"/>
<ResourceDictionary Source="Application/UserInterface/Styles/TabScrollLeftButtonStyle.xaml"/>
<ResourceDictionary Source="Application/UserInterface/Styles/TabScrollRightButtonStyle.xaml"/>
<ResourceDictionary Source="Application/UserInterface/Styles/TabListDropDownButtonStyle.xaml"/>
<ResourceDictionary Source="Application/UserInterface/Styles/TabHostComboBoxStyle.xaml"/>
<ResourceDictionary Source="Application/UserInterface/Styles/TabButtonStyle.xaml"/>
<ResourceDictionary Source="Application/UserInterface/Styles/TabHostPanelStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
App.xaml を WinForms プロジェクトに移行しましたが、ビルド アクションが Page に設定されています。ApplicationDefinition に設定すると、アプリケーションに複数のエントリ ポイントがあるというエラーが表示されますが、これは理にかなっていますが、スタイルなどが取得されているかどうか疑問に思っています。そうでない場合、これが、コントロールがあるはずの場所に空白の灰色の四角形が表示される理由を説明している可能性があります。これらがないと、その外観を定義するものが何もないためです。おそらく問題は、これらのスタイルを WinForms アプリケーションに取り込んで、WPF コントロールがそれらを認識できるようにするにはどうすればよいかということです。
また、これは .NET Fx 3.5 で実行されていることにも言及する必要があります。
とにかく、今のところ私は困惑しているので、どんな助けも感謝して受け取ります.
どうもありがとう!
バート