Search

'static'에 해당되는 글 1건

  1. 2008.08.16 XAML에서 static 변수 사용법 (4)

XAML에서 static 변수 사용법

프로그래밍 2008.08.16 16:39 Posted by 아일레프

블로그에 글을 게시한 지도 꽤 많은 시간이 흘렀습니다. 그 동안 많은 일이 있었습니다. 닷넷엑스퍼트란 좋은 회사에 입사했고, 1 주일 동안 교육을 받은 후 바로 프로젝트에 투입되어 매우 즐겁게 프로그래밍하고 있습니다. 즐거운 일을 할 수 있는 전 참 행운아인 것 같습니다. ^^ 서론은 여기까지 하고 XAML 에서 static변수 사용법에 대해서 알아보도록 합시다.


  • x:Static 키워드

    XAML에서는 static 키워드를 사용하기 위해서 x:Static 이라는 키워드를 사용합니다. WPF책들을 살펴보면 x:Static 키워드를 사용한 예를 찾아볼 수 있는데요, 대부분 SystemParameters 클래스 안의 static 변수를 사용하는 예제를 보여줍니다.

Height="{x:Static SystemParameters.PrimaryScreenHeight}"

위는 Height 속성에 SystemPArameters의 PrimaryScreenHeight Static 변수를 대입하는 XAML코드입니다.


  • 이번엔 직접만든 Class에 static 변수를 넣고 그 값을 한번 XAML에 대입해 봅시다.

namespace Test

{

public class CustomStaticClass

{

public static double WindowHeight = 300;

}

}

Height="{x:Static CustomStaticClass.WindowHeight}"

한번 빌드해볼까요? 당연히 에러가 날 것입니다. 에러 메시지를 보면 CustomStaticClass를 찾을 수 없다고 하는 군요. CustomStaticClass가 있는 namespace를 XAML코드 상에서 인식하지 못하기 때문입니다. XAML에서 네임스페이스를 다음과 같이 추가합니다.

xmlns:local="clr-namespace:Test"

그리고 다음과 같이 작성해 봅시다.

Height="{x:Static local:CustomStaticClass.WindowHeight}"

빌드가 성공하고 성공적으로 프로그램이 동작함을 확인 할 수 있을 것입니다.


  • XAML에서 *.resx파일 사용하기

    이제 좀 더 나아가 visualStudio2008에서 제공하는 *.resx파일을 사용해봅시다. *.resx파일은 Static 멤버를 가지는 클래스를 생성하기 때문에 x:Static 키워드로 사용할 수 있을 것 같습니다.

 

Resources.resx파일에 다음과 같이 Test라는 string을 추가해보도록 하겠습니다.

위와 같이 만든 string 리소스는 코드상에서 다음과 같이 접근이 가능합니다.

string test = Properties.Resources.Test;


XAML에서도 한번 해볼까요?

Title="{x:Static local:Properties.Resources.Test}"

안타깝게 빌드 에러가 납니다. GraphicTest.Properties.Resources가 Test라 는 static member를 가지고 있지 않다고 나오는 군요.

Resource 디자이너가 만든 코드를 열어보았습니다.

internal static string Test

{

get {

return ResourceManager.GetString("Test", resourceCulture);

}

}

위와 같이 존재하고 있음을 알 수 있습니다. 왜 안될까요? 아무래도 internal 키워드가 좀 걸리네요. 위를 보니 class 의 키워드도 public 이 아닌 internal로 되어 있습니다. 모두 public으로 바꾸고 실행 해보았습니다. 오, 성공적이네요. Internal 키워드가 역시 문제였던 겁니다. 그런데, XAML에서 resx파일을 사용하려면 매번 위와 같이 internal로 된 keyword를 public으로 바꾸는 작업을 해야한다면.. 그것은 곧 resx파일을 사용할 수 없다는 것과 동일 하겠군요. ResxXFileCodeGenerator가 public 키워드로 된 클래스와 멤버를 제공하면 좋을 텐데요.


  • 정말 다행히도 VisualStudio2008에서는 PublicResXFileCodeGenerator라는 녀석이 있습니다.

    위와 같이 ResXFileCodeGenerator를 PublicResXFileCodeGenerator 로 바꾸고 저장 후 실행하니 잘 되는 군요. WPF에서는 앞으로 이 녀석을 사용해야 할 것 같습니다. ^^


신고
TAG , ,