'UserControl'에 해당되는 글 3건
- 2008/04/03 C# WPF에 Win Form 컨트롤 붙이기
- 2008/03/03 [C#] - 사용자 컨트롤 투명 처리 ( User Control with transparent background )
- 2008/03/03 [C#] - UserControl 의 EventHandler 연동하기
Win Form 에서 WPF 를 추가 해서 사용할때는 ElementHost를 사용합니다.
자세한 내용은 Win Form 에 WPF 컨트롤 붙이기 를 참고 하시구요.
그렇다면 이제 반대로 WPF 에서 Win Form을 추가 해서 쓰고 싶을때는 어떻게 할까 고민해보니.
WindowsFormsHost 라는 객체를 이용하면 처리가 되네요.
<Grid>
<my:WindowsFormsHost ... />
</Grid>
이렇게 xaml 코드를 추가한 후에 cs 파일에서 추가를 아래와 같이 합니다.
private void Window_Loaded(object sender, RoutedEventArgs e)
{
WindowsFormsControlLibrary1.UserControl1 uc =
new WindowsFormsControlLibrary1.UserControl1();
windowsFormsHost1.Child = uc;
}
중점 사항
- UserControl 클래스를 추가 해서 사용해야 합니다. 즉, userControl 의 dll 파일을 참조 추가 해서
사용해야 한다는 말이죠. - WPF 에서 Win Form의 UserControl의 객체를 접근하기 위해서는 노출이 되어 있지 않기 때문에 게터 메소드를 하나 만들어서 해야 합니다.
예) public string TextValue { get { return textBox1.Text; } } - 위의 게터 메소드가 노출되어 있다면 아래와 같이 WPF를 통해서 값을 참조할 수 있네요.
예) WindowsFormsControlLibrary1.UserControl1 uc =
(WindowsFormsControlLibrary1.UserControl1)windowsFormsHost1.Child;
textBox1.Text = uc.TextValue;
다른 몇가지 사항에 대해서는 더 테스트를 해보지 않았습니다.
우선 자세한 코드는 아래 파일을 보세요.
더 자세한 사항이나 기타 의논하고 싶으신 부분 있으시면 언제든 연락 부탁 해요.
관련 파일:
[C#] - 사용자 컨트롤 투명 처리 ( User Control with transparent background )

사용자 컨트롤 배경 투명색으로 처리 하기
이 부분은 뒷 배경을 투명으로 바꾸기는 하지만 Flicker 처리가 되지 않아서
이동시 잔상이 생기게 되네요.
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace transcontroldemo
{
/// <summary>
/// Summary description for TransPanel.
/// </summary>
public class TransPanel : Panel
{
public TransPanel()
{
//
// TODO: Add constructor logic here
//
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT
return cp;
}
}
protected void InvalidateEx()
{
if (Parent == null)
return;
Rectangle rc = new Rectangle(this.Location, this.Size);
Parent.Invalidate(rc, true);
}
protected override void OnPaintBackground(PaintEventArgs pevent)
{
//do not allow the background to be painted
}
protected override void OnResize(EventArgs eventargs)
{
this.InvalidateEx();
}
Random r = new Random();
protected override void OnPaint(PaintEventArgs e)
{
int h = this.Height / 2;
int w = this.Width;
Pen p = new Pen(Color.White, 2);
e.Graphics.DrawLine( p, 0,h, w, 0);
p.Dispose();
}
}
}
커스텀 컨트롤 EventHandler 등록하기
사용자 컨트롤을 추가한 후에 EventHandler 를 추가하고 나면 Form에 추가한 컨트롤에서
사용자가 입력한 변수 및 이벤트를 처리할 수 있습니다.
바로 아래 코드는 이벤트 핸들러 처리 코드 입니다.
public event EventHandler PrefixChanged;
public string Prefix
{
get { return this.prefix; }
set {
this.prefix = value;
//PrefixChanged 이벤트를 발생시킨다.
if (this.PrefixChanged != null)
{
PrefixChanged(this, EventArgs.Empty);
}
this.Invalidate();
}
}
자세한 내용 보기
WinformHostSolution.zip
Prev
Rss Feed