我创建了一个DataTemplate来管理ListBox中项目的显示。当我在常规WPF应用程序中打开控件时,它可以正常工作。但是,当我在Windows窗体应用程序中托管的Windows窗体控件中打开它时,不使用datatemplate。认为在该上下文中可能存在“FindResource”问题,我在代码隐藏中添加了DataTemplate。在常规WPF应用程序中打开时,它再次正常工作,但在Windows窗体应用程序中打开时失败。
如果我设置了ListBox本身的背景,我会看到“应该”显示的所有项目的背景和空行 - 所以我知道数据到达那里,只是模板没有适用自己。
加载窗体控件的代码:
_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>
答案 0 :(得分:0)
您需要在应用程序中启动WPF实例。为此,请在启动或主要winforms项目中创建App.xaml文件。
App.xaml,除了包含和类声明之外,你应该有以下几行:(你可以有一个只包含include的空文件,所以这部分可以为空)
<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);
}