디자인 타임 현지화를 구현하려고합니다. Xaml의 창에 적절한 언어로 레이블을 표시하기 위해 레이블을 자동 변경하는 언어 및 언어 컨트롤을 선택하는 속성이 필요합니다.WPF 첨부 된 속성
언어 기호 (예 : LANG_SURNAME 또는 LANG_FORENAME)가 포함 된 LanguageLabel에서 연결된 속성 (LanguageMarkupProperty)의 내용을 검색하여 레이블 텍스트를 조회 한 다음 지정된 언어로 조회합니다. 지금까지 나는 콘텐츠 컨트롤에서 파생 객체를 만들었습니다
public class LanguageLabel : ContentControl
{
public LanguageLabel()
{
EventManager.RegisterClassHandler(typeof(Window),
DisplayLanguage.LanguageChangedEvent,
new RoutedEventHandler(this.ChangeLanguage));
this.Loaded += new RoutedEventHandler(LanguageLabel_Loaded);
}
~LanguageLabel()
{
}
// Walk up the visual tree to find the top level object.
private DependencyObject FindUpVisualTree(DependencyObject initial)
{
DependencyObject current = initial;
DependencyObject last = current;
while (current != null)
{
last = current;
current = VisualTreeHelper.GetParent(current);
}
return last;
}
void LanguageLabel_Loaded(object sender, RoutedEventArgs e)
{
object root = FindUpVisualTree(this);
UIElement window = root as UIElement;
PossibleLanguages ?language = null;
if (window != null)
language = (PossibleLanguages)window.GetValue(DisplayLanguage.DisplayLanguageProperty);
if (language == null) language = PossibleLanguages.UKEnglish;
string languageSymbol = GetValue(LanguageMarkup.LanguageMarkupProperty) as string;
this.Content = Language.Translate(languageSymbol, language);
}
public void ChangeLanguage(object sender, RoutedEventArgs e)
{
LanguageChangedEventArgs le = e as LanguageChangedEventArgs;
string languageSymbol = GetValue(LanguageMarkup.LanguageMarkupProperty) as string;
this.Content = Stanley.Language.Translate(languageSymbol, (PossibleLanguages)le.DependencyPropertyChangedEventArgs.NewValue);
}
}
나는 또한 내가 XAML의 창에 걸었습니다 연결된 속성라는 이름의 표시 언어를 만들었습니다.
public class DisplayLanguage
{
public static readonly DependencyProperty DisplayLanguageProperty;
public static void SetDisplayLanguage(UIElement element, PossibleLanguages value)
{
element.SetValue(DisplayLanguageProperty, value);
}
public static PossibleLanguages GetDisplayLanguage(UIElement element)
{
return (PossibleLanguages)element.GetValue(DisplayLanguageProperty);
}
static DisplayLanguage()
{
DisplayLanguageProperty = DependencyProperty.RegisterAttached(
"DisplayLanguage",
typeof(PossibleLanguages),
typeof(WindowBase),
new FrameworkPropertyMetadata(PossibleLanguages.UKEnglish, FrameworkPropertyMetadataOptions.AffectsRender ,new PropertyChangedCallback(OnDisplayLanguageChanged))
);
}
public static void AddReceiver(object receiver, RoutedEventHandler e)
{
}
public static void OnDisplayLanguageChanged(DependencyObject control, DependencyPropertyChangedEventArgs e)
{
// Fire an event to tell the LanguageLabel controls to update to the new language.
}
}
내가 이벤트를 발생하는 OnDisplayLanguageChanged 좋아할 어떻게 든 그 모든 언어가 디자인 타임에 자신의 표시를 업데이트 컨트롤을 알려줍니다. 아무도 내가 이것을 어떻게 할 수 있는지 안다?
'디자인 타임 현지화'란 무엇을 의미합니까? – NVM
나는 xaml이 VS IDE에서 렌더링한다는 것을 의미합니다 –
잘못된 키. 다시 시도하십시오. VS2010의 디자인 타임 렌더링은 적절한 언어 변환이 적용된 레이블을 보여줍니다. –