2012-09-21 50 views
0

我創建了一個DataTemplate來管理ListBox中項目的顯示。當我在常規的WPF應用程序中打開該控件時,它可以正常工作。但是,當我在Windows窗體應用程序中託管的Windows窗體控件中打開它時,不會使用數據項模板。考慮到在這種情況下可能是「FindResource」的問題,我在代碼隱藏中添加了DataTemplate。在常規WPF應用程序中打開時,它再次正常工作,但在Windows窗體應用程序中打開時失敗。在Windows窗體控件中打開WPF控件時不使用DataTemplate

如果我設置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> 
+0

燦你發佈了代碼,在xaml中實際應用模板的地方。 – Hasanain

回答

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); 
} 
+0

Winforms應用程序對我來說幾乎是一個黑盒子。我無法添加任何內容。目前的開發模式是創建獨立的用戶控件dll,然後在WinForms應用程序的上下文中「打開」。除了通過更改黑匣子應用程序,沒有其他辦法可以做到這一點嗎? – billp

+0

有什麼方法可以將鉤子添加到應用程序啓動序列中?如果可以這樣做,則可以添加執行上述操作的初始化例程。 – Hasanain

相關問題