0

我创建了一个 DataTemplate 来管理 ListBox 中项目的显示。当我在常规 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;

数据模板 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 回答