2012-02-29 7 views
0

ListBox 컨트롤과 비슷한 것으로 식별 할 수있는 컨트롤이 있습니다. 각 항목은 하나의 요소 (예 : TextBlock)로 나타납니다. 내가 원하는 것은이 항목의 레이아웃을 변경하여 두 개의 TextBlock을 포함하도록하는 것입니다. 그래서 ControlTemplate을 만들고, Border Grid, TwoTextBlocks를 넣고, 모두 잘합니다. 이제 문제 : 나는 항목의 텍스트를 현지화 할 수 있어야합니다속성에 바인딩 확장 구현

, 나는 다음과 같이 일반적으로 이런 짓을 :

<... Text="{Binding Strings.SomeString, Source={StaticResource ApplicationResources}}" /> 

이 지금은 모두 TextBlocks와 동일한 기능을 수행 할 수 있어야합니다. 그래서이 항목이 바인딩 할 사용자 지정 형식을 만들어야하고 두 가지 속성 (제목 및 설명)을 노출해야한다고 생각했습니다. 이 속성을 문자열 유형으로 노출하면 모든 것이 정상적으로 작동하지만 이전에 사용한 마크 업 바인딩이 느슨해졌습니다. 두 속성을 사용하여 동일한 결과를 얻는 방법? 내가 ResourcemManager 클래스와 현지화 작업을 할 수 있었다

<... Title="{Binding Strings.SomeString, Source={StaticResource ApplicationResources}}", Description="{Binding Strings.AnotherString, Source={StaticResource ApplicationResources}}" /> 

하지만, 런타임에 동적으로 적용되는 현지화를 제공하기 위해도 복잡해진다 : 같은 결과는해야한다.

위의 코드를 사용하려면 어떻게해야합니까? 그런 다음 ApplicationResource에 INotifyPropertyChanged를 구현하면 모든 것이 설정됩니다.

답변

0

대단원!

나는 여기서 한 것과 똑같은 일을 할 것입니다. 예, 해결책이 있지만 지금까지 제대로 작동하는지 확신 할 수 없습니다.

먼저, 사전을 보유하고있는 LocalizationManager가 필요합니다. 사용자 계정 창을 지역화해야하는 경우

예를 들어, 그냥이

<TextBlock Text="something, UsernameKey"> 

을하고 localizationManager는 UsernameKey에 "사용자 이름"또는 다른 언어

둘째, XAML 확장을지도 할 LocalizationManager에서 키 값을 찾으십시오.

이 확장 기능이 Binding 확장에서 파생 될 수 있는지 궁금합니다. 그렇다면이 기능은 매우 쉽습니다. 대상에 바인딩 개체를 만듭니다. 그렇지 않다면 동적 업데이트 xaml 확장으로 UIElement에 대한 WEAK 참조를 보유하고 있다고 생각합니다. 텍스트가 적절합니다.

이 솔루션은 간단하지만 일반적인 것은 아닙니다. 오른쪽에서 왼쪽으로 읽는 언어가 있습니다. 응용 프로그램에 오른쪽에서 왼쪽으로 내용을 표시하도록 요청합니다.

그래서 일반적인 솔루션이 있지만 좀 더 복잡합니다.

xaml 확장 대신 첨부 종속성 속성을 사용합니다.

이처럼 수행

<TextBlock LocalizationManager.LocalizationKey="UsernameKey" /> 

그래서, 지금 문제는 LocalizationManager으로 "텍스트"속성을 설정하는 방법은?

우리는 어댑터를 사용

이 LocalizationManager 유형 "TextBlock에"그래서

, 응용 프로그램이 부팅에 대한 적절한 어댑터를 검색합니다, 우리는 LocalizationManager 일부 어댑터를 등록 :

LocalizationManager.Current.RegisterAdapter<TextBlock>(new TextBlockAdapter()) 

이 솔루션은보다 일반적이다, 어댑터를 제공하면 모든 종류의 컨트롤을 지원하지만, 알다시피이 솔루션은 이전의 것보다 훨씬 더 많은 작업과 복잡한 작업을 필요로합니다. 내가 처음에 질문을 왜

내가이 디자인 솔루션 I, 나는 그것이 작동되도록 할 수 있었다 말했듯이, ~ 당신에게

+0

안녕 dBear 도움이 될 희망하지만 접근 방식을 좋아하지 않아,이입니다 장소. 내 접근 방식은 약간 다르지만 LocalizationResource라는 다른 속성을 도입했습니다. 따라서 Text에는 키 또는 일반 텍스트 만 포함됩니다. 그러나 여전히 표준이 깨지기 때문에 내가 선호하는 해결책이 아닙니다. – Goran