2019년 1월 26일 토요일

Xaml Resource 및 Window 로드 예제

Xaml Resource 및 Window 로드 예제
1. 비주얼 스튜디오 -> WPF 응용프로그램 , 프로젝트명 : LoadXamlWindow
2. App.xaml, MainWindow.xaml 삭제
3. 프로젝트 -> 우측마우스 -> 추가 -> 새항목추가
[XamlWindow.xml] – 코딩해보세요
파일 생성 후 속성을 확인하면 빌드작업 속성에 “Resource”로 되어 있다.
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Title="Load Xaml Window And Button"
SizeToContent="WidthAndHeight"
ResizeMode="CanMinimize">
<StackPanel>
<Button HorizontalAlignment="Center"
Margin="40" Name="XamlButton">
Hello, WPF!
</Button>
<Ellipse Width="100"
Height="50"
Margin="24"
Stroke="Red" //경계선을 그릴 브러쉬
StrokeThickness="10" />
<ListBox Width="100"
Height="100"
Margin="24">
<ListBoxItem></ListBoxItem>
<ListBoxItem>사과</ListBoxItem>
<ListBoxItem></ListBoxItem>
<ListBoxItem>바나나</ListBoxItem>
<ListBoxItem>수박</ListBoxItem>
<ListBoxItem>참외</ListBoxItem>
</ListBox>
</StackPanel>
</Window>
4. 프로젝트 -> 우측마우스 -> 추가 -> 새항목추가
[LoadXamlWindow.cs] – 코딩해보세요
using System;
using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Markup;
namespace LoadXamlWindow
{
class LoadXamlWindow
{
[STAThread]
public static void Main()
{
Application app = new Application();
// Pack Uri 체계를 통한 리소스 파일을 식별하여 로딩
// 로컬 어셈블리의 프로젝트 폴더 루트에 있는 리소스 파일에 대한 Pack URI
Uri uri = new Uri("pack://application:,,,/XamlWindow.xml");
Stream stream = Application.GetResourceStream(uri).Stream;
Window win = XamlReader.Load(stream) as Window;
win.AddHandler(Button.ClickEvent, new RoutedEventHandler(Button_Click1));
Button b = (Button)win.FindName("XamlButton"); // XAML파일에 정의
b.Click += Button_Click2;
app.Run(win);
}
static void Button_Click1(object sender, RoutedEventArgs args)
{
MessageBox.Show((args.Source as Button).Content.ToString()+"1");
}
static void Button_Click2(object sender, EventArgs args)
{
MessageBox.Show(((Button)sender).Content.ToString()+"2");
}
}
}
n 실행화면
n XamlWindow.xml 파일은 Stand Alone xaml 파일과 유사한데 가장 큰 차이는 Button 객체에 Name 속성을 포함시킨 것으로 이 속성은 FrameworkElement에 의해 정의된 것이다.
n LoadXamlWindow.cs 파일의 생성자에서 XML 리소스를 위한 Uri 객체를 생성하고 StreamResourceInfo 객체를 반환하기 위한 Application.GetResourceStream 정적프로퍼티를 사용한다. StreamResourceInfo는 리소스를 위한 스트림을 반환하는 Stream 프로퍼티가 있으며 이 스트림 객체가 XamlReader.Load 메소드의 인자로 들어가고 반환되는 객체를 Window의 Content 프로퍼티에 할당한다.
n 일단 Xaml로부터 변환되어 Window의 비주얼 트리의 일부가 되면 FindName 메소드로 이름을 통해 엘리먼트를 찾는 것이 가능하고 이벤트 등을 달 수 있다.
n 버튼에 이벤트를 달기 위한 다른 방법으로 XamlReader.Load의 반환값을 Window 객체로 받은 후 버튼 클릭 이벤트 핸들러를 비주얼 트리속에서 찾아 연결하지 않고 Window의 AddHandler를 이용하여 버튼의 클릭 이벤트 핸들러 메소드를 정의했다.
n Application의 Run을 호출시 인자로 Window 객체를 전달해서 윈도우 실행

댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...