2017-06-15 74 views
0

內的按鈕,我有一個WPF對話框,承載一個windowsFormHost控制,像這樣的東西關閉WPF對話框時,一個點擊的WindowsFormHost

<Window x:Class="WPFSort.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:WPFSort" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <WindowsFormsHost HorizontalAlignment="Left" Height="Auto" 
          Margin="87,43,0,0" VerticalAlignment="Top" Width="Auto"> 
      <local:SimpleWinControl /> 
     </WindowsFormsHost> 

    </Grid> 
</Window> 

而對於SimpleWinControl,這是一個WinForm控件。當點擊button 1,我想

  1. 被關閉的WPF對話框
  2. 而且數據importantdata是「傳遞出」來調用WPF對話框中的WPF的形​​式?

    public partial class SimpleWinControl : UserControl 
    { 
        public SimpleWinControl() 
        { 
         InitializeComponent(); 
        } 
    
        public object importantdata; 
    
        private void button1_Click(object sender, EventArgs e) 
        { 
         //how should I write the close and pass the importantdata out 
    
        } 
    } 
    

回答

1

例如,您可以將屬性添加到您的WinForms控制暴露出Button控制:

public partial class SimpleWinControl : UserControl 
{ 
    public SimpleWinControl() 
    { 
     InitializeComponent(); 
    } 

    public Button TheButton { get { return button1; } } 

    ... 
} 

給了的WinForms在XAML標記控制的x:Name

<WindowsFormsHost HorizontalAlignment="Left" Height="Auto" Margin="87,43,0,0" VerticalAlignment="Top" Width="Auto"> 
    <local:SimpleWinControl x:Name="winFormsControl" /> 
</WindowsFormsHost> 

...和掛鉤到的Click事件在WPF對話框窗口的後臺代碼:

public partial class Dialog : Window 
{ 
    public Dialog() 
    { 
     InitializeComponent(); 
     winFormsControl.TheButton.Click += (s, e) => this.Close(); 
    } 
} 

打開的對話框中,然後可以訪問importantdata場一旦ShowDialog方法返回窗口:

private void ShowDialog_Click(object sender, RoutedEventArgs e) 
{ 
    Dialog d = new Dialog(); 
    d.ShowDialog(); 

    object importantData = d.winFormsControl.importantdata; 
} 

另一種選擇可能是提高來自WinForms控件的事件:https://msdn.microsoft.com/en-us/library/5z57dxz2(v=vs.90).aspx