2019년 1월 26일 토요일

(WPF/XAML교육)Load Embedded Xaml(C# 파일의 문자열을 XAML로 파싱하여 실행하기)

(WPF/XAML교육)Load Embedded Xaml(C# 파일의 문자열을 XAML로 파싱하여 실행하기)
n 다음과 같이 코딩된 C# 프로그램이 있을 때
srting strXaml = “<Button “ +
“ xmlns=’http://schemas.microsoft.com/winfx/2006/xaml/presentation’ “ +
“ Foreground = ‘LightSeaGreen’ “ +
“ FontSize = ‘24pt’> “ +
“ Hello, WPF! “ +
“ </Button> “;
문자열 안의 코드를 통해 버튼 객체를 생성하고 속성을 초기화 하는 작업을 한다고 할 때 리플렉션을 사용해야 하고 Foreground, FontSize 같은 속성을 설정하기 위해서는 사용된 데이터에 대한 가정이 필요하므로 이러한 일을 할 “파서”가 필요하다.
System.Window.Markup 네임스페이스의 XamlReader 클래스가 그러한 일을 하는데 Load라는 정적 메소드를 통해 XAML을 파싱해 초기화된 객체로 전환한다. 반대로 Save 메소드는 객체로부터 XAML을 생성하는 일을 한다. Load 메소드는 인자로 Stream 또는 XmlReader 객체를 필요로 하므로 다음처럼 직접 사용은 불가능 하다.
Button b = (Button)XamlReader.Load(strXaml); //잘못된 사용법
방법1.
using System.IO;
MemoryStream memory = new MemoryStream(strXaml.Length);
StreamWriter writer = new StreamWriter(memory);
writer.Write(strXaml);
writer.Flush();
memory.Seek(0, SeekOrigin.Begin);
Object obj = XamlReader.Load(memory);
방법2.
using System.Xml;
using System.IO;
StringReader strReader = new StringReader(strXaml);
XmlTextReader xmlReader = new XmlTextReader(strReader);
object obj = XamlReader.Load(xmlReader);
App.xaml, MainWindow.xaml을 삭제하고 작성하자.
LoadXaml.cs
using System;
using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Markup;
using System.Xml;
namespace WpfApplication2
{
class LoadXaml : Window
{
[STAThread]
public static void Main()
{
Application app = new Application();
app.Run(new LoadXaml());
}
public LoadXaml()
{
Title = "Load Embedded Xaml";
string strXaml =
"<Button xmlns='http://schemas.microsoft.com/" +
"winfx/2006/xaml/presentation'" +
" Foreground='LightSeaGreen' FontSize='24pt'>" +
" Hello, WPF!" +
"</Button>";
StringReader strReader = new StringReader(strXaml);
XmlTextReader xmlReader = new XmlTextReader(strReader);
Button b = (Button)XamlReader.Load(xmlReader);
b.Click += Button_Click;
Content = b;
}
void Button_Click(object sender, EventArgs args)
{
MessageBox.Show("Emnbedded Xaml Test");
}
}
}

댓글 없음:

댓글 쓰기

(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...