@@ -11,30 +11,50 @@ namespace dosymep.WpfCore.Behaviors;
1111/// Поведение применения языка.
1212/// </summary>
1313public 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