'WPF'에 해당되는 글 48건
- 2008/10/03 WPF 를 이용한 Monitoring 툴 개발중... (1)
- 2008/06/02 Kaxaml 폼을 비슷하게 따라 만들어본 베이스 프레임
- 2008/06/01 Kaxaml 1.0 Tool
- 2008/04/03 [WPF] 윈도우 형태의 백그라운드 샘플..
- 2008/04/03 C# WPF에 Win Form 컨트롤 붙이기
- 2008/03/10 [WPF] - Angle Gauge 데모 (1)
- 2008/03/10 [WPF] - Animation ( Storyboard ) 데모
- 2008/01/02 [WPF] Canvas 에 드로잉 하기
- 2007/12/14 [WPF] Employee Info to Button Content - DataTemplate !!
- 2007/12/13 [WPF] ResourceTemplate And Button - ControlTemplate !!
- 2007/12/13 [WPF] Button With Template - ControlTemplate !!
- 2007/11/30 [WPF] UserControl 의 DependencyProperty 프로퍼티 사용해서 호출하기
- 2007/11/28 [WPF] Animation Value 값을 바꾸면서 회전시켜본 데모
- 2007/11/27 [WPF] ColorScroll Demo
- 2007/11/26 ProgressBar Demo
DB, Webservice, C#, WPF를 통합적으로 공부 하기 위해서.
현재 모니터링 툴을 하나 개발 중이다.
대충 이런 개념이다.
프로그램을 하다 보면 로그를 남겨야 하고,
그 로그로 인한 상태 정보를 파악하고자 할때가 많다.
그래서 그 로그 정보를 해당 DB로 저장하도록 한다.
웹 서비스를 통해서 해당 로그 정보를 DB로 저장하게 된다.
그리고 모니터링 툴은 현재 변경된 정보만을 DB에서 웹 서비스를 통해서
지속적으로 화면에 출력하게 된다.
출력되는 내용에 따라서 에러나 경고 메시지는 창을 통해서 새롭게 출력이 되게 된다.
대충 이런 개념이다.
현재 DB, 웹 서비스 부분은 완료 되었으며,
모니터링 툴의 UI 부분도 대충은 마무리가 되어 가고 있다.
심플하게 구성해 봤지만.
다양한 어플리케이션을 배울 수 있는 아주 좋은 프로젝트인듯 하다.
이후에 다양하게 응용할 부분은 해당 어플리케이션의 시스템 상태 정보를 볼수 있는 경우나,
IDC 센터의 서버를 이용해서 모니터링을 받게 되면, 유지 보수 및 원격지에서도
해당 어플리케이션의 정보를 탐색이 가능할듯 하다.
이후에는 프로그램의 노가다를 최대한 줄이기 위한 나만의 복사코드를 DB화 해서
원격지에서 해당 클립 보드로 전송하고, 그 내용을 바로 적용 가능하도록 하고
더 나아가면, 음성 인식 시스템을 도입해서, 해당 내용을 빠르게 검색하고
내용 전송을 통한 코드 적용을 극대화 하는 것도 연구중이다.
이 부분에서는 음성 인식 패턴을 다양하게 구축할 수 있는 서버가
관건인듯 하지만.. 아직은 자금이나, 아이디어가 많이 부족하기 때문에.
다양한 단위 테스트를 통한 학습을 우선 해야 할듯 하다.
우선 모니터링 툴에 대한 일부 내용들은 내가 WPF용으로 따로 만든 티스토리 페이지에서
지속적으로 업데이트할 생각이다.
WPF 관련된 내용은 여기 페이지가 많아지는 걸 없애기 위해서
그쪽에서 여러가지 테스트를 통한 내용들을 정리할 생각이다.
바쁘지만.. 요즘 같은 시기가 나에게는 다시금 오지 않을 30대 초반의
자유인듯 하다.
http://www.google.co.kr/imgres?imgurl=http://thewpfblog.com/images/yahoo1.jpg&imgrefurl=http://www.snowball.be/CategoryView,category,WPF.aspx&h=473&w=630&sz=261&tbnid=RkGYSUpLU1QJ:&tbnh=103&tbnw=137&prev=/images%3Fq%3Dwpf&hl=ko&sa=X&oi=image_result&resnum=15&ct=image&cd=3
Welcome to Kaxaml!
Kaxaml is a lightweight XAML editor that gives you a "split view" so you can see both your XAML and your rendered content (kind of like XamlPad but without the gigabyte of SDK). Kaxaml is a hobby and was created to be shared, so it's free! Feel free to download and try it out. If you don't like it, it cleans up nicely.
UserControl의 기능을 처리 하기 위해서 의존 프로퍼티도 있어야 할거 같은데요. Click 버튼을 누르면 UserControl의 시작 스토리 보드 객체를 Begin() 하면 될듯, 더 내용을 추가 하고 몇가지 테스트를 해보면서 조금씩 기본기를 익혀야 할거 같다.
관련 코드
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;
다른 몇가지 사항에 대해서는 더 테스트를 해보지 않았습니다.
우선 자세한 코드는 아래 파일을 보세요.
더 자세한 사항이나 기타 의논하고 싶으신 부분 있으시면 언제든 연락 부탁 해요.
관련 파일:
Angle Gauge 를 표현해 봤습니다.
원형의 형태에서 AngleArc 같은걸 표현하지 못해서..
조금 다르게 표현해 봤네요.. -.-
Design 에서 그려서 Blend 를 통해서 표현해 봤어요.
TextBox 를 통해서 각도를 입력 받고, Start를 사용해서 에니메이션 구동..
UI만 이쁘게 꾸민다면.. 나름 이쁜 상태 표시용 게이지가 되겠네요.
관련 코드 :
Wpf Animation( Storyboard ) Demo
Xaml의 Storyboard를 추가 하고 cs 파일을 통해서 처리 해봤습니다.
- Button 을 누르면 해당 값을 설정하고 바로 에니메이션을 동작한다.
- SliderBar 을 누르면 해당 값을 설정하고 바로 에니메이션을 동작한다.
관련코드 :
본 내용은 자료가 좀 많다. -.-
우선 정리는 시간이 걸리기 때문에 차후에 해야 할거 같다.
간단하게 정리 하면...
Employee 라는 직원 정보를 담고 있는 클래스를 하나 제작한다.
Button의 Content의 프로퍼티를 Employee 객체로 설정하여 버튼을 확장하는 예제이다.
여기에서 사용되는 내용은 ContentTemplate, DataTemplate, DataTemplateSelector, DataTemplate.Triggers 등에 대한 내용을 담고 있다.
(이 내용은 WPF 서적의 25장. 템플릿의 내용이다.)
관련소스 :
<ControlTemplate x:Key="btnCustom" TargetType="{x:Type Button}">
이 경우 TemplateBinding 표현에서 의존 프로퍼티의 클래스 이름을 앞에 붙일 필요는 없다. 바인딩에는 이 프로퍼티를 참조하라는 정보가 들어 있기 때문.
소스보기..
public partial class UserControl1 : UserControl
{
public static DependencyProperty InputTextProperty;
public UserControl1()
{
InitializeComponent();
//
InputTextProperty = DependencyProperty.Register("InputText", typeof(string),
typeof(UserControl1),
new FrameworkPropertyMetadata("none", new PropertyChangedCallback(OnInputTextChanged)));
}
public string InputText
{
set { SetValue(InputTextProperty, value); }
get { return (string)GetValue(InputTextProperty); }
}
private void OnInputTextChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
TextBlock tb = this.FindName("txtShow") as TextBlock;
tb.Text = InputText;
}
}
관련코드 :
본 프로그램은 위의 그림의 Grid 객체가 중앙을 기준으로 회전하는 에니메이션 예제 입니다.
Start Angle, End Angle의 값을 변경해서 시작과 끝의 각도를 정해줄 수 있습니다.
Start, End의 회전각도를 정하고 Start 버튼을 누르면 원하는 각도만큼 회전할 수 있습니다.
본 예제는 Animation을 진행할 때 Value의 객체를 cs 파일에서 접근해서 처리 하기가 힘든 기존의 부분을 처리 하기 쉽도록 테스트를 해본 겁니다. ^^ (개인적으로 힘들었어요)
[코드 설명]
Animation의 SplineDoubleKeyFrame에 들어 가는 Value의 값을 바꾸기 위해서
처리용 클래스를 하나 제작했습니다.
public class AniControl
{
private int start;
private int end;
public int Start
{
set { start = value; }
get { return start; }
}
public int End
{
set { end = value; }
get { return end; }
}
}
이제 연동을 위해서 xaml 코드에 추가작업을 했습니다.
Window.Resources 내부에 미리 값을 지정하면서 aniControl을 하나 제작생성했습니다.
미리 제작한 Timeline1의 에니메이션 코드의 SplineDoubleKeyFrame 의 Value에 DataBind를 연결합니다.
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="grid" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)">
<SplineDoubleKeyFrame KeyTime="00:00:00"
Value="{Binding Source={StaticResource aniControl}, Path=Start}"/>
<SplineDoubleKeyFrame KeyTime="00:00:02"
Value="{Binding Source={StaticResource aniControl}, Path=End}"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
이렇게 해서 실행해 보면 객체를 회전시킬 수 있습니다.
여기서 조금더 추가를 해서 Start, End의 값을 TextBox를 통해서 값을 받아서 회전 값을 처리하도록 구현했습니다.
TextBox의 값을 바로 바인딩해도 되지만 aniControl로 값을 보내도록 해봤습니다.
Text="{Binding Source={StaticResource aniControl}, Path=Start, Mode=TwoWay}"
TextWrapping="Wrap" RenderTransformOrigin="0,0.333" x:Name="txtStart"/>
<TextBox HorizontalAlignment="Left" Margin="90,108,0,0" VerticalAlignment="Top" Width="56" Height="24"
Text="{Binding Source={StaticResource aniControl}, Path=End, Mode=TwoWay}"
자세한 코드 내용은 소스를 한번 보시구요.
모르는거 있으시면 연락 주세요 ^^.
관련 소스 :
ColorScroll
3개의 슬라이드 바를 사용해서 칼라 값을 조정하는 데모 입니다.
MultiBinding을 사용해서 3개의 슬라이드 바의 값을 합쳐서 RGB로 만들어 내는 방법입니다.
여기에는 IValueConverter 를 상속받아서 처리 하는 코드도 같이 포함되어 있습니다.
관련 코드 :
Start 버튼을 누르면 프로그래스바가 100%까지 차는 모양을 도시해봤습니다.
- TextBlock의 값은 IValueConverter 를 사용해서 double의 값을 string형태로 변환했습니다.
- Rectangle을 사용해서 프로그래스바를 하나 작성했습니다.
- Rectangle의 Width의 속성을 사용해서 증가율을 표시 하고
해당 증가율을 옆에 TextBlock로 하나 작성해서 뿌렸습니다.
바인딩은 Rectangle의 Width를 소스형태로 하고 TextBlock의 Text가 타겟형태로 구성
모드는 디폴트로 처리 했습니다.
관련 소스 :

WpfApplication2.zip
Prev