오랫만의 WPF 포스팅입니다. :)
http://hoons.kr 에 올라온 질문에 대한 답변이기도 하고요.

WPF는 아주 쉬운 방법으로 기존의 Windows Forms 기반의 컨트롤들을 호스팅하고 사용할 수 있죠. 이 글에서는 WPF에서 Windows Forms 컨트롤 -여기에서는 WebBrowser-을 호스팅하고 제어하는 방법에 대해 간략하게 알아보겠습니다.

기반 지식
MSDN에서 이 토픽에 대해 친절하게 설명하고 있습니다. 이 글은 MSDN을 기반으로 하여 WebBrowser 컨트롤을 WPF 윈도우에 호스팅하는 예제를 알아보겠습니다.

우선 WPF와 Windows Forms 및 C# 프로그래밍에 대한 기초적인 지식이 필요합니다. 여기에서는 각 내용에 대해 충분히 알고 있다고 가정합니다.

Windows Forms 컨트롤을 호스팅하기

다음에 설명할 예제는 아래에서 다운받을 수 있습니다.
WindowsFormsHostSample.zip

Windows Forms Host Sample



Howto
1. WindowsFormsHostSample 이라는 이름으로 WPF Windows Application을 하나 생성합니다.

2. 솔루션 익스플로러의 References에서 마우스 오른쪽 버튼을 눌러 Add Reference를 선택하거나 메뉴의 Project->Add Reference를 선택하고 다음과 같이 [.Net] 탭에서 System.Windows.Forms와 WindowsFormsIntegration 어셈블리를 선택하고 [OK]를 누릅니다.


3. 다음과 같이 Window1.xaml의 루트 엘리먼트에 System.Windows.Forms의 네임스페이스를 추가하고 WindowsFormsHost엘리먼트와 그 하위의 WebBrowser 엘리먼트를 추가합니다. 예제에는 그 외에 URL 이동을 시험해볼 수 있는 다른 엘리먼트도 추가하였습니다.
XAML
<Window x:Class="WindowsFormsHostSample.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
    Title="Window1" Height="640" Width="480">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="20" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>

        <StackPanel Grid.Row="0" Orientation="Horizontal" Background="#FFCCCCCC">
            <TextBox x:Name="myUrl" Width="400" HorizontalAlignment="Left" />
            <Button x:Name="navigateUrl" Width="50" Content="" IsDefault="True" HorizontalAlignment="Left" />
        </StackPanel>

        <
WindowsFormsHost>
            <wf:WebBrowser x:Name="myBrowser" Url="http://google.com" />
        </WindowsFormsHost>
    </Grid>
</Window>

4. Window1.xaml.cs의 Window1 클래스에 다음과 같이 WebBrowser 컨트롤과 상호작용 할 수 있는 간단한 코드를 추가합니다.
C#
public Window1()
{
    InitializeComponent();
    myBrowser.DocumentCompleted +=
        new
System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(myBrowser_DocumentCompleted);
    navigateUrl.Click += new RoutedEventHandler(navigateUrl_Click);
}

// 이동 버튼을 눌렀을 때 해당 URL로 이동합니다.
void navigateUrl_Click(object sender, RoutedEventArgs e)
{

    try
    {
        myBrowser.Navigate(myUrl.Text);
    }
    catch (Exception ex)
    {
        MessageBox.Show("URL 이동에 예외 발생 : " + ex.Message.ToString());
    }
}

// 웹 문서의 로딩이 완료되었을 때 화면에 표시해줍니다.
void myBrowser_DocumentCompleted(object sender, System.Windows.Forms.WebBrowserDocumentCompletedEventArgs e)
{
    MessageBox.Show("문서 로딩이 완료되었습니다. : " + e.Url.ToString());
}

5. 프로젝트를 빌드하고 F5를 눌러 테스트해 봅니다. 다음과 같이 WebBrowser가 정상적으로 동작함을 알 수 있고, TextBox에 URL을 입력하고 [이동]버튼을 눌러보면 페이지 네비게이션이 됨을 확인할 수 있습니다.

참고

MSDN:
http://msdn2.microsoft.com/en-us/library/ms742875.aspx : Windows Forms Control 호스팅하기
http://msdn2.microsoft.com/en-us/library/system.windows.forms.integration.windowsformshost.aspx : WindowsFormsHost Class
신고
Posted by gongdo


티스토리 툴바