티스토리 뷰
과거에도 이런 내용으로 포스트를 한 적이 있었는데..이번에 유니버셜 앱 만들면서 수정한 내용으로 업데이트 한다. 아마 UWP에서도 가능하지 않을까 생각한다...딱히 다른건 없을 듯..
셈플 소스는 만들게되면 올릴 예정이다.
1. DynamicResource.cs 추가
/// <summary>
/// 다이나믹 리소스
/// </summary>
public class DynamicResource : DynamicObject
{
/// <summary>
/// 윈도우 리소스로더
/// </summary>
private ResourceLoader _rl;
/// <summary>
/// 프로퍼티로 호출
/// </summary>
/// <param Name="Id"></param>
/// <returns></returns>
public string this[string Id]
{
get
{
string str = string.Empty;
if (DesignMode.DesignModeEnabled == false)
{
if (_rl == null)
{
_rl = new ResourceLoader();
}
str = _rl.GetString(Id);
if (string.IsNullOrEmpty(str))
{
str = string.Empty;
}
}
else
{
//디자인 타임에서는 키값을 반환
str = Id;
}
return str;
}
}
/// <summary>
/// 이름으로 호출
/// </summary>
/// <param Name="binder"></param>
/// <param Name="result"></param>
/// <returns></returns>
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
string str = string.Empty;
if (DesignMode.DesignModeEnabled == false)
{
if (_rl == null)
{
_rl = new ResourceLoader();
}
str = _rl.GetString(binder.Name);
if (string.IsNullOrEmpty(str))
{
str = string.Empty;
}
}
else
{
str = binder.Name;
}
result = str;
return true;
}
}
일단 위에 클래스를 만들기
2. App.xaml 수정
<Application.Resources>
<ResourceDictionary>
<local:DynamicResource x:Key="DResource"/>
</ResourceDictionary>
</Application.Resources>
App.xaml에 대략 위와 같이 DynamicResource 클래스를 한개 인스턴스
3. App.xaml.cs 수정
OnLaunched 이벤트 내부에
//인스턴스된 리소스 로더를 스테틱 객체에 입력
if (StaticFunctions.DResource == null)
StaticFunctions.DResource = Application.Current.Resources["DResource"];
생성된 인스턴스를 Static 프로퍼티에 추가
4. StaticFunctions
public static class StaticFunctions
{
/// <summary>
/// DynamicResource object set
/// </summary>
public static dynamic DResource;
}
5. 여기까지 하면 이제부터는 사용가능합니다.
수동으로 언어 설정을 변경하려면 아래 코드를 App.xaml.cs - OnLaunched 이벤트에 추가하면 됩니다.
//언어 설정 변경
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "en-US";
6. XAML에서 사용하기
<!--TextBlock에서 Text 프로퍼티에 사용-->
<TextBlock Text="{Binding [txt_properties], Source={StaticResource DResource}}"/>
<!--Button에서 Content 프로퍼티에 사용-->
<Button Content="{Binding [txt_view], Source={StaticResource DResource}}"/>
위와 같이 디자인 타임에서는 리소스 키 이름이 보임
영어인 경우
한글인 경우
7. 코드에서 텍스트 리소스 사용
StaticFunctions.DResource에는 DynamicResource의 인스턴스가 들어가 있음
var confirm =
await
EtcHelper.Instance.ConfirmAsync(
StaticFunctions.DResource.msg_delete_move_recycle_bin,
StaticFunctions.DResource.qst_delete_selected_items);
리소스 키를 일반 프로퍼티 처럼 사용해서 호출
영문
한글
8. 추가 적으로 텍스트 리소스를 사용할 때 Multilingual App Toolkit을 이용하면 다른 언어지원하는 것을 쉽게 작업 할 수 있다.
'Windows 10&11' 카테고리의 다른 글
Display driver stopped responding and has recovered (0) | 2015.11.24 |
---|---|
FlipView를 이용한 이미지 뷰어 만들기 (0) | 2015.10.06 |
Windows 10 UWP app 리젝 사유와 해결 방법 (0) | 2015.09.17 |
Todo list Universal & UWP app (0) | 2015.09.16 |
UWP Package 만들 때 발생하는 오류와 해결 방법 (0) | 2015.09.15 |
- Total
- Today
- Yesterday
- kiosk
- .net 5.0
- Cross-platform
- .net
- UWP
- C#
- IOT
- #MVVM
- #prism
- Always Encrypted
- LINQ
- WPF
- ComboBox
- #uwp
- uno-platform
- Microsoft
- ef core
- Behavior
- visual studio 2019
- Visual Studio 2022
- XAML
- MVVM
- Bot Framework
- #Windows Template Studio
- uno platform
- Windows 10
- windows 11
- PRISM
- dotNETconf
- Build 2016
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |