Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Windows窗体控件中打开WPF控件时未使用DataTemplate_C#_Wpf_Xaml - Fatal编程技术网

C# 在Windows窗体控件中打开WPF控件时未使用DataTemplate

C# 在Windows窗体控件中打开WPF控件时未使用DataTemplate,c#,wpf,xaml,C#,Wpf,Xaml,我创建了一个数据模板来管理列表框中项目的显示。在常规WPF应用程序中打开控件时,它工作正常。但是,当我在Windows窗体应用程序中托管的Windows窗体控件中打开它时,不会使用datatemplate。考虑到在这种情况下“FindResource”可能有问题,我在代码中添加了DataTemplate。在常规WPF应用程序中打开时,它再次正常工作,但在Windows窗体应用程序中打开时失败 _elementHost = new ElementHost(); _elementHost.Dock

我创建了一个数据模板来管理列表框中项目的显示。在常规WPF应用程序中打开控件时,它工作正常。但是,当我在Windows窗体应用程序中托管的Windows窗体控件中打开它时,不会使用datatemplate。考虑到在这种情况下“FindResource”可能有问题,我在代码中添加了DataTemplate。在常规WPF应用程序中打开时,它再次正常工作,但在Windows窗体应用程序中打开时失败

_elementHost = new ElementHost();
_elementHost.Dock = DockStyle.Fill;
this.Controls.Add(_elementHost);
NavigationControl userControl = new NavigationControl(); // the wpf control
_elementHost.Child = userControl;
如果我设置了列表框本身的背景,我会看到背景以及所有“应该”显示的项目的空行——因此我知道数据正在到达那里,只是模板本身没有应用

_elementHost = new ElementHost();
_elementHost.Dock = DockStyle.Fill;
this.Controls.Add(_elementHost);
NavigationControl userControl = new NavigationControl(); // the wpf control
_elementHost.Child = userControl;
加载windows窗体控件的代码:

_elementHost = new ElementHost();
_elementHost.Dock = DockStyle.Fill;
this.Controls.Add(_elementHost);
NavigationControl userControl = new NavigationControl(); // the wpf control
_elementHost.Child = userControl;
数据模板xaml:

_elementHost = new ElementHost();
_elementHost.Dock = DockStyle.Fill;
this.Controls.Add(_elementHost);
NavigationControl userControl = new NavigationControl(); // the wpf control
_elementHost.Child = userControl;
<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>

您需要在应用程序中启动WPF实例。为此,请在启动或主winforms项目中创建App.xaml文件

_elementHost = new ElementHost();
_elementHost.Dock = DockStyle.Fill;
this.Controls.Add(_elementHost);
NavigationControl userControl = new NavigationControl(); // the wpf control
_elementHost.Child = userControl;
在App.xaml中,除了includes和class声明之外,还应该有以下几行:(可以有一个只包含includes的空文件,因此此部分可以为空)

_elementHost = new ElementHost();
_elementHost.Dock = DockStyle.Fill;
this.Controls.Add(_elementHost);
NavigationControl userControl = new NavigationControl(); // the wpf control
_elementHost.Child = userControl;
在Main.cs或Program.cs中的启动方法中:

_elementHost = new ElementHost();
_elementHost.Dock = DockStyle.Fill;
this.Controls.Add(_elementHost);
NavigationControl userControl = new NavigationControl(); // the wpf control
_elementHost.Child = userControl;
private static void Main()
{
// Your initialization code

//WPF instance start
                App.EnsureApplicationResources();

                Application.Run(MainForm.Instance);
}

你能发布代码吗,在那里你可以用xaml应用模板。Winforms应用程序对我来说几乎是一个黑匣子。我不能补充什么。当前的开发模式是创建独立的用户控制DLL,然后在WinForms应用程序的上下文中“打开”。除了更改黑盒应用程序之外,没有其他方法可以做到这一点吗?有没有任何方法可以将挂钩添加到应用程序启动序列中?如果可以这样做,可以添加一个执行上述操作的初始化例程。