Skip to content

Commit 8ac4415

Browse files
authored
Сделано применение локализации при загрузке окна (#7)
1 parent 8c3451f commit 8ac4415

File tree

1 file changed

+31
-11
lines changed

1 file changed

+31
-11
lines changed

src/dosymep.WpfCore/Behaviors/WpfLocalizationBehavior.cs

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,30 +11,50 @@ namespace dosymep.WpfCore.Behaviors;
1111
/// Поведение применения языка.
1212
/// </summary>
1313
public sealed class WpfLocalizationBehavior : Behavior<FrameworkElement> {
14+
private IHasLocalization? _localization;
1415
private ILocalizationService? _localizationService;
1516

1617
/// <inheritdoc />
1718
protected override void OnAttached() {
18-
Subscribe(AssociatedObject as IHasLocalization);
19+
_localization = AssociatedObject as IHasLocalization;
20+
21+
// Если окно было уже загружено
22+
// такое может быть, когда не используется behaviour в конструкторе
23+
if(AssociatedObject.IsLoaded) {
24+
Subscribe();
25+
}
26+
27+
AssociatedObject.Loaded += AssociatedObjectOnLoaded;
28+
AssociatedObject.Unloaded += AssociatedObjectOnUnloaded;
1929
}
2030

2131
/// <inheritdoc />
2232
protected override void OnDetaching() {
23-
Unsubscribe(AssociatedObject as IHasLocalization);
33+
Unsubscribe();
34+
AssociatedObject.Loaded -= AssociatedObjectOnLoaded;
35+
AssociatedObject.Unloaded -= AssociatedObjectOnUnloaded;
36+
}
37+
38+
private void AssociatedObjectOnLoaded(object sender, RoutedEventArgs e) {
39+
Subscribe();
40+
}
41+
42+
private void AssociatedObjectOnUnloaded(object sender, RoutedEventArgs e) {
43+
Unsubscribe();
2444
}
2545

26-
private void Subscribe(IHasLocalization? localization) {
27-
if(localization is not null) {
28-
_localizationService = localization.LocalizationService;
29-
_localizationService?.SetLocalization(localization.HostLanguage, AssociatedObject);
30-
31-
localization.LanguageChanged += LanguageOnThemeChanged;
46+
private void Subscribe() {
47+
if(_localization is not null) {
48+
_localizationService = _localization.LocalizationService;
49+
_localizationService?.SetLocalization(_localization.HostLanguage, AssociatedObject);
50+
51+
_localization.LanguageChanged += LanguageOnThemeChanged;
3252
}
3353
}
3454

35-
private void Unsubscribe(IHasLocalization? localization) {
36-
if(localization is not null) {
37-
localization.LanguageChanged -= LanguageOnThemeChanged;
55+
private void Unsubscribe() {
56+
if(_localization is not null) {
57+
_localization.LanguageChanged -= LanguageOnThemeChanged;
3858
}
3959
}
4060

0 commit comments

Comments
 (0)