0

リストボックス内のアイテムの表示を管理するために作成したDataTemplateがあります。通常のWPFアプリケーションでコントロールを開くと、正しく機能します。ただし、WindowsフォームアプリケーションでホストされているWindowsフォームコントロールで開くと、データテンプレートが使用されません。そのコンテキストでは「FindResource」に問題がある可能性があると考えて、コードビハインドにDataTemplateを追加しました。もう一度、通常のWPFアプリで開くと正しく機能しましたが、Windowsフォームアプリで開くと失敗しました。

ListBox自体の背景を設定すると、表示する必要のあるすべての項目の背景と空白行が表示されます。つまり、データがそこに到達していることがわかります。テンプレート自体が適用されないだけです。

Windowsフォームコントロールをロードするコード:

_elementHost = new ElementHost();
_elementHost.Dock = DockStyle.Fill;
this.Controls.Add(_elementHost);
NavigationControl userControl = new NavigationControl(); // the wpf control
_elementHost.Child = userControl;

dataTemplate xaml:

<DataTemplate x:Key="WorkingAccountResultTemplate" >
    <StackPanel Orientation="Horizontal">
        <TextBlock Text="Test" Width="50" Foreground="Purple" Background="AliceBlue"/>
        <TextBlock Text="{Binding ItemKeyId}" HorizontalAlignment="Stretch" Background="Maroon" />
    </StackPanel>
</DataTemplate>
4

1 に答える 1

0

アプリケーションで WPF インスタンスを開始する必要があります。これを行うには、スタートアップまたはメインの winforms プロジェクトに App.xaml ファイルを作成します。

App.xaml の場合、インクルードとクラス宣言に加えて、次の行が必要です (インクルードだけの空のファイルを作成できるため、このセクションは空にすることができます)。

<Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml"/>
            </ResourceDictionary.MergedDictionaries>
</Application.Resources>

App.xaml、コード ビハインド:

public partial class App : Application
{
    public App()
    {
        StyleManager.ApplicationTheme =new Windows7Theme();
        InitializeComponent();
    }

    public static void EnsureApplicationResources()
    {
        if (Application.Current == null)
        {
            // create the Application object
            new App {ShutdownMode = ShutdownMode.OnExplicitShutdown};                                
        }
    }

    protected override void OnExit(ExitEventArgs e)
    {
        if(Current != null)
            Current.Shutdown();

        base.OnExit(e);
    }
}

Main.cs または Program.cs の起動メソッド:

private static void Main()
{
// Your initialization code

//WPF instance start
                App.EnsureApplicationResources();

                Application.Run(MainForm.Instance);
}
于 2012-09-21T21:02:16.757 に答える