Namespace와 LINQ to XML

Posted 2008/07/24 22:13 by 길버트
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             x:Class="ButtonStyleSample.App"
             xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"
             >
    <vsm:Application.Resources>
         <Style x:Key="myButtonStyle" TargetType="Button">
             ...생략
         </Style>
         <Style x:Key="yourButtonStyle" TargetType="Button">
             ...생략
         </Style>
         <Style x:Key="herButtonStyle" TargetType="Button">
             ...생략
         </Style>
         <Style x:Key="hisButtonStyle" TargetType="Button">
             ...생략
         </Style>
    </vsm:Application.Resources>
</Application>

string xml에 위의 내용이 들어있다고 가정하고,

XDocument xDoc = XDocument.Parse(xml);

위와 같이 xDoc을 준비해 놓고,

XML데이터에서 Style을 돌면서 x:Key의 Value값만 쏙쏙 뽑아내는 LINQ구문을 작성한다면
어떻게 하시겠습니까?


오답

첨엔 막연히 이렇게 해봤습니다.

var result = from c in xDoc.Descendants("Style")
                select (string)c.Attribute("x:Key").Value;

네, 에러가 납니다.
Attribute의 이름에는 콜론(:)을 추가할 수 없습니다.

Attribute메서드의 파라미터는 XName이구요.
XName을 생성할 때 콜론(:)이 들어간 문자열을 허용하지 않기 때문입니다.

정답

XNamespace x = "http://schemas.microsoft.com/winfx/2006/xaml";
var result = from c in xDoc.Descendants("Style")
                select (string)c.Attribute(x + "Key").Value;

XNamespace + string이 XName이 되도록 연산기호 +에 대해
오퍼레이트 오버라이딩이 잘 되어있더라구요.

x + "Key" 이런 식으로 사용하는 것은 썩 직관적이지 않아서 맘에 안드는데,
알고 나니까 잘 쓸 수는 있겠더라구요. ^^

하지만 역시 LINQ는 쓰면 쓸수록 편한 것 같습니다.

Enjoy your LINQ!



Tag : LINQ, namespace, Silverlight, xml, 실버라이트

코멘트를 남겨 주세요. (Write your message and submit)

MouseWheelHelper.cs (Ver. 휴즈플로우)

Posted 2008/07/24 08:06 by 길버트

Silverlight 1.1 시대의 그것과도 다르고
DeepZoom Composer에서 자동 생성해주는 프로젝트에 들어있는 그것과도 다른...

MouseWheelHelper.cs - Ver. 휴즈플로우

소스가 약간 다르지만 사용방법은 다를 것이 없습니다.
성능상의 차이도.. 글쎄요 ^^;

정리 및 공유 차원에서 포스팅합니다.

Usage

MouseWheelHelper wheelHelper = new MouseWheelHelper(this);
wheelHelper.Moved += new EventHandler<MouseWheelEventArgs>(wheelHelper_Moved);

void wheelHelper_Moved(object sender, MouseWheelEventArgs e)
{
    e.Handled = true;

    if (e.Delta > 0) // 휠 버튼 업!
    {
         // Zoom In 따위를 구현
    }
    else if (e.Delta < 0) // 휠 버튼 다운!
    {
         // Zoom Out 따위를 구현
    }
}

이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : MouseWheelHelper, Silverlight, 실버라이트, 휠버튼, 휴즈플로우

코멘트를 남겨 주세요. (Write your message and submit)

FLICKLOCK?! - Flickr + Clock (Silverlight)

Posted 2008/07/20 01:49 by 길버트


FLICKLOCK?

FLICKLOCK is 'FLICKR + CLOCK'.
It shows you recent photo from flickr.com using Flickr Open API

Does it looks like something you have event seen?
You're right!
It's exactly is the homage to UNIQLOCK.


SPECIFICATION

UNIQLOCK is showing the 'Time Zone Name' under the time text.
Butm FLICKLOCK shows 'DOKDO / SOUTH KOREA' (hard coded).

It means 'Dokdo(=island) is absolutely Korean territory'.

You can see clock for 5 seconds (the way UNIQLOCK does),
then you can see 5 recent photos from flickr.com.


1. If you click FLICKLOCK when the photos are being showed,  
it will float new window to get the flickr.com webpage for the photo.

2. If you click FLICKLOCK when time text is being showed,
it will float new window to get the 'Dokdo Museum'


Share

Click to SHARE button to get the code for sharing.


Source


I hope it would be helpful to you.
이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : flickr, Silverlight, uniqlock

코멘트를 남겨 주세요. (Write your message and submit)


FLICKLOCK?


FLICKLOCK은 FLICKR + CLOCK으로,
Flickr Open API를 이용하여 flickr.com에 업로드 된 최신 이미지를 보여줍니다.

어디서 많이 본 모습을 하고 있지요?
맞습니다.
많은 블로거들의 사랑을 받는 UNIQLOCK오마주입니다.


특징

UNIQLOCK에서는 TIMEZONE 설정을 시계 아래 보여줍니다만,
FLICKLOCK에서는 DOKDO / SOUTH KOREA란 문구를 하드코딩 해 버렸습니다.

silverlight.net 공식사이트 갤러리에도 소스와 함께 등록요청을 할 계획인데요,
만약 그대로 등록이 될 경우, 은연 중에 외국인 개발자에게 DOKDO가 한국 땅이라는 메세지를
전할 수 있길 바라고 있습니다.

UNIQLOCK과 마찬가지로 5초 동안 시계를 보여주고,
FLICKLOCK에 실시간으로 올라온 최신 사진 5개를 1초 간격으로 번갈아가며
노출합니다.

1. 각 사진이 화면에 떠있는 동안 FLICKLOCK을 클릭하면,
해당 사진이 등록되어 있는 flickr.com의 페이지를 새창으로 띄워줍니다.

2. 시계만 보이고 있는 동안 FLICKLOCK을 클릭하면,
독도 박물관 사이트(영문)를 새창으로 띄워줍니다.


퍼가기

SHARE버튼을 누르면 퍼가기 코드를 제공합니다.


소스공개


업무시간 쪼개서 만드느라 급하게 만들어서, 소스가 조금 허접합니다만,
응용작품 만드시는데 도움이 되시길 바랍니다.
이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : DokDo, flickr, Silverlight, uniqlock, 독도, 실버라이트, 유니클락

  1. 한누리

    share 상태에서 소스카피한 다음, 원래 화면으로 되돌아가는 기능이 없는듯 한데요.
    share버튼을 toggle 형식으로 만들어서 share/view 모드로 전환가능하면 어떨까 합니다.
    항상 열심히하시니 부럽군요. 그럼 수고하세요.

    | 2008/07/20 14:52 | PERMALINK | EDIT | REPLY |
  2. BlogIcon 길버트

    일단, 오른쪽 위에 'X' 버튼이 있어서,
    원래 화면으로 돌아가실 수가 있습니다만,
    잘 눈에 안 띄나 보네요. 개선하도록 하겠습니다.
    그리고 share 버튼 토글화도 좋은 아이디어시네요.
    감사합니다.

    | 2008/07/20 22:47 | PERMALINK | EDIT |
  3. 한누리

    죄송해요. 작아서 그런지 미처 x버튼을 못봤네요.

    | 2008/07/20 23:34 | PERMALINK | EDIT |
  4. BlogIcon Joyh

    우왕 달아봐야지..

    | 2008/07/20 22:03 | PERMALINK | EDIT | REPLY |
  5. BlogIcon 길버트

    윤형군 달았다가 떼었구나?
    심각한 문제점이라도 발생?

    | 2008/07/21 09:13 | PERMALINK | EDIT |
  6. BlogIcon Joyh

    집에서는 나왔는데 회사에서 안나와서 잠시 창고로 이관하였습니다.

    | 2008/07/21 12:48 | PERMALINK | EDIT |
  7. BlogIcon 길버트

    윤형군 실버라이트 설치 했는데도 안나오는 것이야?
    증상을 소상히 알려줘!

    | 2008/07/21 13:08 | PERMALINK | EDIT | REPLY |
  8. 1

    <vsm:VisualStateManager.VisualStateGroups>
    이라는 속성이 없다고 나오는데요 (Visual Studio 2008) Silverlight 2 beta2

    | 2008/07/21 15:10 | PERMALINK | EDIT | REPLY |
  9. BlogIcon 길버트

    네, 안녕하세요!
    그것은 Visual Studio가 아직 Silverlight 2 Beta 2의 Feature인
    VisualStateManager를 제대로 인식을 하지 못해서 보이는 에러입니다.

    그럴 땐 한번 더 컴파일을 수행하시면 에러가 사라지는 것을 보실 수 있습니다.
    프로그램을 실행하는데 전혀 지장이 없는 에러입니다.

    Silverlight 2 정식버전 공개와 함께 나올 Visual Studio 2008 패치에서
    문제가 해결되리라 생각합니다.
    감사합니다.

    | 2008/07/21 16:40 | PERMALINK | EDIT |
  10. 1

    네 감사합니다.
    저 나름데로 찾아보니까 비주얼 스튜디오 문제라고 나오네요...ㅎㅎㅎㅎ
    오류로 분류는 되지만 컴파일 및 실행은 된다고 하네요...

    | 2008/07/21 18:20 | PERMALINK | EDIT | REPLY |
코멘트를 남겨 주세요. (Write your message and submit)

상황설명

UserControl 부모와 UserControl 자식이
UserControl.Resource 하위에 같은 이름을 가진 스토리보드를 가지고 있는 상황에서,
자식을 생성하여 부모의 LayoutRoot.Children에 Add를 하려고 시도하면,
경우에 따라서 다음 그림과 같이 ArgumentException을 유발합니다.

사용자 삽입 이미지

정확히 어떤 경우에 이렇게 되는지 실험을 통해 알아 보았습니다.


실험조건

Fafamama 클래스 - 부모 역할을 하는 UserControl 입니다.
Son 클래스 - 자식 역할을 하는 UserControl입니다.
Daughter 클래스 - 자식 역할을 하는 UserControl입니다.

Fafamama는 LayoutRoot의 Opacity를 조정하는 sbShow란 Storyboard를 UserControl.Resources 하위에 가지고 있으며,
Son은 Fafamama를 쏙 빼 닮아 자신의 LayoutRoot의 Opacity를 조정하는 sbShow란 똑같은 이름의
Storyboard
를 가지고 있습니다.
Daughter는 Son이 가지고 있는 스토리보드와 똑같은 스토리보드를 이름만 다르게 하여 가지고 있습니다.

Fafamama.MakeSons() 메서드 - 두 명의 아들을 생성합니다.
Fafamama.MakeDaughters() 메서드 - 두 명의 딸을 생성합니다.

총 6가지 케이스를 실험하기 위해 6번 Fafamama를 생성합니다.

Case 1) Fafamama의 생성자에서 MakeDaughters 호출
Case 2) Fafamama의 Loaded 이벤트에서 MakeDaughters 호출
Case 3) 버튼 클릭에 의해 이미 생성되어 있는 Fafamama의 MakeDaughters 호출

Case 4) Fafamama의 생성자에서 MakeSons 호출
Case 5) Fafamama의 Loaded 이벤트에서 MakeSons 호출
Case 6) 버튼 클릭에 의해 이미 생성되어 있는 Fafamama의 MakeSons 호출


라이브 실험

아래 실버라이트 어플리케이션 안에 실험 Case 6개에 대한 버튼을 준비 하였습니다.
한번 씩 눌러보십시오.


실험결과

부모와 같은 이름의 Storyboard를 가지고 있지 않은 Daughter의 경우, 언제나 예외발생 없이 생성이 된 반면,
UserControl 부모, 자식이 같은 이름의 스토리보드를 가지고 있는 Son의 경우,
생성자에서 호출 시를 제외하고서는 부모의 Panel에 Children.Add 할 수 없었습니다.
이런 경우를 만나신다면 당분간은 피해서(스토리보드 이름을 중복되지 않게 준다거나, 이름을 유지하고, 다른 객체의 Resources 하위로 옮김) 사용해야 하겠습니다.


다운로드


실험에 사용된 프로젝트입니다.



 

Tag : ArgumentException, Children.Add실패, Silverlight, Storyboard이름중복, 실버라이트

  1. BlogIcon HOONS

    맞아요~ 저도 예전에 삽질했던 기억이 있네요 ㅎㅎ

    | 2008/07/10 15:30 | PERMALINK | EDIT | REPLY |
  2. BlogIcon 길버트

    아하! 경훈씨도 그런 경험이 있었군요!

    | 2008/07/12 08:59 | PERMALINK | EDIT |
코멘트를 남겨 주세요. (Write your message and submit)

[SL2 B2] Socket 사용을 위한 Policy Server 만들기

Posted 2008/07/03 17:10 by 길버트

개요

Silverlight 2 Beta 2에서 Socket을 사용할 때 Cross-Domain에 있는 소켓 서버에
접속을 하려면 서버 측의 정책을 확인하는 과정이 필요하게 된 것 아시죠?

다시말해, 실버라이트 런타임이 943번 포트를 통해 실버라이트 정책 파일을 요청하면,
서버 쪽에서는 정책파일을 보내줘야 하는데요.

며칠 전 공도씨[MSDN] 네트워크 보안 접근 제약란 제목의 장문의 번역글을 포스팅했습니다.

그 내용의 하단에 보시면 그런 역할을 하는 서버를 만드는 방법이 소개되어 있습니다.
[소켓을 위한 정책 파일 예제][소켓을 위한 정책 서버의 샘플 코드] 내용이 있구요.
Mike SnowsTip of the Day #12 - Full Implementation of a Silverlight Policy Server.
참고하면 정책 파일 서버를 만들 수 있다고 설명해 놓았습니다.


다운로드

아래는 그것을 그대로 따라서 만들어 놓은 프로젝트구요.

제가 조금 코드를 바꿔서 정책 파일 요청시 Socket Client의 IP를 화면에서 알 수 있도록
하였습니다.

PolicyConnection.cs

public PolicyConnection(Socket client, byte[] policy)
{
    _connection = client;
    _policy = policy;

    _buffer = new byte[_policyRequestString.Length];
    _received = 0;

    try
    {
 // receive the request from the client
 //_connection.BeginReceive(_buffer, 0, _policyRequestString.Length, SocketFlags.None,
 //    new AsyncCallback(OnReceive), null);

 _connection.BeginReceive(_buffer, 0, _policyRequestString.Length, SocketFlags.None,
       new AsyncCallback(OnReceive), client.RemoteEndPoint.ToString());
    }
    catch (SocketException)
    {
 _connection.Close();
    }
}

...

private void OnReceive(IAsyncResult res)
{
    try
    {
 _received += _connection.EndReceive(res);

 // if we haven't gotten enough for a full request yet, receive again
 if (_received < _policyRequestString.Length)
 {
     _connection.BeginReceive(_buffer, _received, _policyRequestString.Length - _received,
  SocketFlags.None, new AsyncCallback(OnReceive), null);
     return;
 }

 // make sure the request is valid
 string request = System.Text.Encoding.UTF8.GetString(_buffer, 0, _received);
 if (StringComparer.InvariantCultureIgnoreCase.Compare(request, _policyRequestString) != 0)
 {
     _connection.Close();
     return;
 }

 // send the policy
 Console.Write(string.Format("Sending policy to {0}\n", res.AsyncState));
 _connection.BeginSend(_policy, 0, _policy.Length, SocketFlags.None,
     new AsyncCallback(OnSend), null);
    }
    catch (SocketException)
    {
 _connection.Close();
    }
}


미리보기


사용자 삽입 이미지


주의사항

컴파일 전에 Program.cs의 한부분을 수정하셔야 합니다.
색깔 있는 부분을 실제 clientaccesspolicy.xml 파일이 위치한 곳의 경로로 변경하셔야 합니다.

Program.cs

static void Main(string[] args)
{
    Console.Write("Starting...\n");
    PolicyServer ps =
 new PolicyServer(@"D:\clientaccesspolicy.xml");
    System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);

}

감사합니다.


보너스

Beta1 시절 포스팅 되었던 스캇구 형님의 소켓 예제를 오늘 다시 한 번 찾아보니!
Beta2 버전으로 포팅이 되었습니다. 여기에도 Policy Server를 포함하고 있습니다.
한 번 훑어 보시면 도움이 되실 거라고 생각합니다.

Pushing Data to a Silverlight Client with Sockets: Part I
Pushing Data to a Silverlight Client with Sockets: Part II

Part I에서는 Socket Server를 Part II에서는 Socket Client를 설명하고 있습니다.

이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : 943포트, clientaccesspolicy.xml, Silverlight, socket, 소켓, 실버라이트, 정책파일

코멘트를 남겨 주세요. (Write your message and submit)

[Remake] MediaElement 동시사용의 한계는 123개다.

Posted 2008/07/01 16:07 by 길버트
이전 포스트를 Silverlight 2 Beta 2 버전으로 포팅하였습니다.


리듬잇 같은 BMS류의 게임을 Silverlight로 제작하다가 발견한 문제입니다.
예를 들어 어떤 곡에서 270여 개의 음원을 사용하는 이유로,
이 음원에 대한 MediaElement를 미리 270개 생성해 놓고 사용하고자 하였습니다.
그 곡을 재생시켜보자 군데군데 연주되지 않는 음이 발견되었습니다.

왜그런가 테스트를 해보다가 123번째 MediaElement 이후에 생성된
MediaElement들은 Play() 메서드가 제대로 작동하지 않는 것을
발견하였습니다.

시뮬레이션

다음은 직접 문제를 체험해 볼 수 있는 샘플입니다.
스피커를 켜고 테스트를 해 보십시오.



소스

아래 링크를 클릭하여 다운 받으십시오.


실험의 결론

Silverlight 2 Beta1에서는 123개 이하의 MediaElement만 만들어 사용해야 합니다.
123개 이상의 MediaElement가 필요한 경우에는 이미 생성해 놓은 MediaElement를
Source만 변경하여 재활용해야 합니다.

예를들어 한 Silverlight Page 내에 123개를 초과하는 동영상, 음악이 존재하는 경우에는
초과분에 해당하는 미디어는 재생을 시킬 수 없습니다.

다른 테스트를 통해 다음과 같은 사실도 추가적으로 알 수 있었습니다.

1) XAML에 <MediaElement ...> 형태로 추가를 해도 124번째부터는 작동을 안 합니다.
2) MediaElement마다 서로 다른 Source를 입력해 주어도 결과는 같습니다.

원인이 무엇인지 궁금합니다.
원인에 따라 차후에 발표되는 Beta2나 정식 릴리즈에서
개선될 수도 있고, 개선되지 않을 수도 있겠네요.

포럼 피드백

실버라이트 포럼에도 같은 글을 게시해 놓고 피드백을 기다리고 있습니다.
http://silverlight.net/forums/t/11735.aspx
이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : MediaElement, Silverlight, 개수제한, 실버라이트

코멘트를 남겨 주세요. (Write your message and submit)

Remix Korea 2008 - 피그맵 시연 동영상

Posted 2008/07/01 14:24 by 길버트
며칠 전, 기다리던 Remix Korea 2008의 동영상이 공식사이트에 업데이트 되었습니다.
http://visitmix.co.kr

그 중 피그맵 부분만 편집해 보았습니다.

중간 중간 시연이 원활하지 못한 부분이 있지만, 꾸욱 참고 봐주세요~ ^^



감사합니다.
이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : Hugeflow, Pigmap, RemixKorea, Silverlight, 리믹스코리아, 실버라이트, 피그맵, 휴즈플로우

코멘트를 남겨 주세요. (Write your message and submit)

crossdomain.xml과 clientaccesspolicy.xml 샘플

Posted 2008/06/26 14:44 by 길버트
crossdomain.xml과 clientaccesspolicy.xml 파일은 아시다시피,
크로스 도메인 접근을 가능 여부를 설정하는 파일입니다.

'무엇에 쓰는 물건인고?'
더 궁금하신 분은 공도님이 실버라이트 2 Beta 1 시절에 정리한
포스트가 있으니 참고 바랍니다. xml 파일 내용은 변경되었지만, 큰 틀은 같습니다.

매번 필요할 때마다 웹서핑하는게 좀 소모적인 것 같아서,
블로그에 세간살이로 들여 놓습니다.


clientaccesspolicy.xml

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
    <cross-domain-access>
        <policy>
            <allow-from http-request-headers="*">
                <domain uri="*"/>
            </allow-from>
            <grant-to>
                <resource path="/" include-subpaths="true"/>
            </grant-to>
        </policy>
    </cross-domain-access>
</access-policy>

crossdomain.xml

<?xml version="1.0"?>

<!DOCTYPE cross-domain-policy SYSTEM

  "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">

<cross-domain-policy>

  <allow-http-request-headers-from domain="* " headers="*" />

</cross-domain-policy>



출처 : How to: Make a Service Available Across Domain Boundaries
이올린에 북마크하기(0) 이올린에 추천하기(0)

Tag : clientaccesspolicy.xml, crossdomain.xml, Silverlight, 실버라이트

  1. BlogIcon 패러다임

    이거 카페 자료실에도 올려 놓아도 되죠? ^^ 항상 생각하고 있던거 였는데 생각난김에 파일 옮겨 놓고 링크 걸겠습니다. ^^

    항상 감사드려요~~ ^^

    | 2008/06/27 01:25 | PERMALINK | EDIT | REPLY |
  2. BlogIcon 길버트

    네 물론이지요~!
    카페장님 파이팅.

    | 2008/06/27 10:43 | PERMALINK | EDIT |
코멘트를 남겨 주세요. (Write your message and submit)

Silverlight WebService Team 블로그에 제가 관심있어 하는 부분에 대한 포스트가 올라와서 번역을 해보았습니다.

원문 : http://blogs.msdn.com/silverlightws/

Duplex Communication (Server Push)
LINQ over JSON (번역 전)
Configuration Support (번역 전)
Tooling Improvements (번역 전)
SOAP Improvements (번역 전)

Scott이나 Tim의 포스트에서 아마도 읽은 바와 같이, 실버라이트 2 Beta 2는 새롭고 향상된 Web Service 기능들을 제공한다. 이 포스트는 우리 Beta 2 시나리오들을 좀더 상세하고 다룰 것이며, 두 주 가량 이어서 진행하면서, 특정한 기능들을 파 보도록 하겠다.

Duplex Communication (Server Push)

이것은 Beta 1 릴리즈 이후, 고객들이 최고로 많이 요청한 기능으로 채팅과 모니터링 프로그램 같은 몇몇 유용한 시나리오를 가능하게 만든다. Duplex는 클라이언트로 하여금 서버가 클라이언트에게 정보를 보내기(push) 위해서 호출할 수 있는 오퍼레이션들의 세트를 노출할 수 있게 합니다. Web Service 스택을 이용하여 브라우저 기반(Browser-based)의 클라이언트에 말을 거는 것은 이전에는 불가능 했기 때문에 우리는 이 기능을 Beta 2에 탑재하는 것에 매우 흥분했다.

Duplex 지원은 두 어셈블리에 있다 :하나는 WCF 서비스에, 다른하나는 Silverlight 클라이언트에 들어있다. 일단 Beta 2 SDK를 깔면, 다음 어셈블리를 얻을 수 있다.

  • C:\Program Files\Microsoft SDKs\Silverlight\v2.0\Libraries\Server\Evaluation\System.ServiceModel.PollingDuplex.dll

    이것은 서버측 어셈블리다. 사용법과 Duplex WCF 서비스를 어떻게 만드느냐 하는 것은 여기를 보면 자세히 알 수 있다. 이 어셈블리는 서버측 PollingDuplexBindingElement를 제공하며, 그것은 custom binding을 만들 수 있게 해주어, service contract를 호스트 하기 위해 custom binding을 사용하는 custom ServiceHost를 만들 수 있게 해 준다.
    이런 식으로 호스트된 service contract는 ServiceContractAttribute.CallbackContract를 제공할 것이고, 이것은 service가 호출할 수 있는 클라이언트 오퍼레이션들을 어떻게 규정할 것인가 하는 것이다. 이 주제는 이 모든 것을 참조하면서 완성된 duplex WCF Service를 보여준다.

    당신은 어쩌면 경로 안에 Evaluation 폴더 이름을 알아챘을 것이다. 이 어셈블리는 Beta 2의 나머지와는 다른 라이센스를 제공한다. 이것은 어플리케이션을 만들기 위한 용도가 아니다. 우리는 개발 환경을 위해 준비가 되기 전에 그 API에 좀 더 작업을 하고, 성능을 튜닝하려고 한다.
  • C:\Program Files\Microsoft SDKs\Silverlight\v2.0\Libraries\Client\System.ServiceModel.PollingDuplex.dll

    이것은 클라이언트측 duplex 어셈블리다. 사용법과 WCF duplex service를 위한 Silverlight 클라이언트 만드는 방법은 여기를 참조하면 된다. 이 어셈블리는 클라이언트측 PollingDuplexHttpBinding을 제공하며, 이것은 WCF dulplex service와 대화하기 위한 채널을 생성하려고 사용한다. 이것은 이미 위에서 다루었다.

여러분은 아마 typed "receiver" 경험과 deserialization에 대해 말한 Eugene의 포스트를 기억할 것이다. 우리는 이것을 가지고 일하고 있고, 몇 주 내에 silverlight.net에 샘플코드를 공개할 수 있을 것 같다.

Tag : Duplex, PollingDuplexBindingElement, PollingDuplexHttpBinding, Push, Silverlight, WebServiceTeam, 실버라이트, 웹서비스팀

코멘트를 남겨 주세요. (Write your message and submit)
개요

오늘은 Application.Current.Host.Content.FullScreenChanged 이벤트에 대해서
한 말씀드리려고 합니다.

실버라이트 2 버전에서부터 Grid 등의 등장과 함께 화면구성하기가 용이해 졌습니다.
예를들어 LayoutRoot의 Width, Height를 Auto로 설정하고,
HorizontalAlignment, VerticalAlignment를 Stretch로 설정하고,
Margin 적당히 주면, 어떤 화면 사이즈에서도 척척 알아서 변하는 UI로 꾸밀 수 있죠.

FullScreen Mode에서는 어떨까요?
네! 화면이 FullScreen이 되면 위에 언급한 것과 같이 구성된 UI는
전체화면 사이즈에 맞게 변화합니다.

하지만 여기에 시차가 존재합니다.

FullScreenChanged 이벤트 핸들러 함수에서 어떤 UIElement의 ActualWidth, ActualHeight
등 사이즈에 관련된 프로퍼티를 참조하는 것은 바람직하지 않습니다.

그 이유를 실험을 통해 알려드리겠습니다.

다운로드 : 실험을 위한 샘플 프로젝트


실험방법

사용자 삽입 이미지

50ms의 Interval로 설정된 DispatcherTimer가
ScrollViewer와 LayoutRoot, Application.Current.Host.Content의 Width를 출력합니다.

FullScreenChanged 이벤트 핸들러에서, [IsFullScreen = true / false]를 출력합니다.

샘플 어플리케이션이 실행되면, FullScreen On/Off 버튼을 눌러 전체화면으로 갔다가,
ESC 키를 눌러 전체화면을 해제한 다음 Stop Timer를 눌러 타이머에 의한 출력을 중단합니다.


실험결과

사용자 삽입 이미지
실험 결과를 보면 'FullScreen Mode가 전환되는 시점'에서
Application.Current.Host.Context.ActualWidth를 제외한 다른 UIElement의 ActualWidth는
바람직한 사이즈 값을 갖게 되는데 시간 지연이 있음을 알 수 있습니다.


결론

FullScreen 전환에 따라 변화한 UIElement들의 사이즈를 참조하려면,
Application.Current.Host.Content.FullScreenChanged 이벤트 핸들러 보다는

SizeChanged 이벤트 핸들러에서 Application.Current.Host.Content.IsFullScreen의
분기문을 작성하여 구현하는 것이 안전하다.

Tag : FullScreenChanged, IsFullScreen, Silverlight, 실버라이트

코멘트를 남겨 주세요. (Write your message and submit)

로렌스 모로니씨와 번개미팅

Posted 2008/06/21 01:09 by 길버트

2008년 6월 20일 오후 7시 마이크로소프트 코리아에서 로렌스 모로니씨와의 번개미팅(팬미팅)이 있었습니다.

실버라이트 때문에 작년보다 새치가 더 많아진 듯 합니다. ^^

실버라이트의 현재와 미래에 대한 많은 Q&A가 오갔지만, 어떤 것이 블로그를 통해 공개할 수 있는 것인지,
아닌지 분간하기 어려워 내용을 올리지 않음을 이해해 주십시오.
정말 이 자리에 함께 하셨으면 좋으셨을 것입니다.

약속대로 김밥은 제공되었구요. 생각보다는 많은 분이 안오셔서 준비해 놓은 김밥이 많이 남았습니다.

질의응답이 모두 끝난 후에 단체사진! (오른쪽 아래가 저예요 ^^)

최고예요!

컵에 싸인해 주는 로렌스 모로니.

IE 8 컵이었습니다.

저도 싸인을 받았지요.

박스마일과 모로니

Tag : Laurence Moroney, Silverlight, 로렌스모로니, 번개미팅, 실버라이트

  1. 비밀댓글 입니다

    | 2008/06/21 07:44 | PERMALINK | EDIT | REPLY |
  2. BlogIcon 길버트

    감사합니다.
    근처 오시면 언제든지 찾아주세요!

    | 2008/06/21 09:30 | PERMALINK | EDIT |
코멘트를 남겨 주세요. (Write your message and submit)