This is a migrated thread and some comments may be shown as answers.

RadDocking is not working change localization at runtime

3 Answers 125 Views
Docking
This is a migrated thread and some comments may be shown as answers.
F1Soft
Top achievements
Rank 1
F1Soft asked on 04 Sep 2017, 09:24 AM

Hi.

I using RadDocking for several languages with Resouce dictionary(DynamicResource in xaml).

if I Switching languages at runtime without LoadLayout() function then it works.

But If i use LoadLayout() at startup then switching language not working.

(Switching Style at runtime is still works with LoadLayout() )

Can anybody help this problem?

3 Answers, 1 is accepted

Sort by
0
Dilyan Traykov
Telerik team
answered on 07 Sep 2017, 07:16 AM
Hello Jae,

Could you please provide more details on the exact approach you've taken for switching the languages at runtime?

It would really be of help if you could open a new support ticket and send over a small sample project that demonstrates the issue so that I can investigate and further assist you.

Thank you in advance for your cooperation on the matter.

Regards,
Dilyan Traykov
Progress Telerik
Want to extend the target reach of your WPF applications, leveraging iOS, Android, and UWP? Try UI for Xamarin, a suite of polished and feature-rich components for the Xamarin framework, which you to write beautiful native mobile apps using a single shared C# codebase.
0
F1Soft
Top achievements
Rank 1
answered on 12 Sep 2017, 08:56 AM

Hello.

Here small sample project.

Please check part of MainWindow() creator.

MainWindow.xaml

--------------------------------------------------

<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WPFResourceTest"
        xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" x:Class="WPFResourceTest.MainWindow"
        mc:Ignorable="d"
        Title="MainWindow" Height="800" Width="700" Closed="Window_Closed">
    <Grid>
        <DockPanel>
            <telerik:RadMenu DockPanel.Dock="Top">
                <telerik:RadMenuItem  Header="{DynamicResource keyLanguage}">
                    <telerik:RadMenuItem  Header="{DynamicResource keyEnglish}" Tag="en-US"  Click="MenuItem_Language_Click" />
                    <telerik:RadMenuItem  Header="{DynamicResource keyKorean}"  Tag="ko-KR"  Click="MenuItem_Language_Click" />
                </telerik:RadMenuItem>
            </telerik:RadMenu>
            <telerik:RadDocking  HasDocumentHost="True" x:Name="mainDocking">
                <telerik:RadSplitContainer InitialPosition="DockedLeft">
                    <telerik:RadPaneGroup >
                        <telerik:RadPane Header="{DynamicResource keyProjects}" telerik:RadDocking.SerializationTag="keyProjects">
                        </telerik:RadPane>
                    </telerik:RadPaneGroup>
                </telerik:RadSplitContainer>
                <telerik:RadSplitContainer>
                    <telerik:RadPaneGroup >
                        <telerik:RadPane Header="{DynamicResource keyContent1}"/>
                        <telerik:RadPane Header="{DynamicResource keyContent2}"/>
                    </telerik:RadPaneGroup>
                </telerik:RadSplitContainer>
                <telerik:RadSplitContainer InitialPosition="DockedRight" >
                    <telerik:RadPaneGroup >
                        <telerik:RadPane Header="{DynamicResource keyProperty}" telerik:RadDocking.SerializationTag="keyProperty">
                        </telerik:RadPane>
                    </telerik:RadPaneGroup>
                </telerik:RadSplitContainer>
            </telerik:RadDocking>
        </DockPanel>
    </Grid>
</Window>

--------------------------------------------------

MainWindow.xaml.cs

--------------------------------------------------

using System;
using System.IO;
using System.IO.IsolatedStorage;
using System.Windows;
using Telerik.Windows.Controls;
namespace WPFResourceTest
{
    /// <summary>
    /// MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            //If I Call this line, language changing not works.
            //If annotation this line, language changing works.
            LoadDockingLayoutFromFile();
        }
        private void Window_Closed(object sender, EventArgs e)
        {
            SaveDockingLayoutToFile();
        }
        private void MenuItem_Language_Click(object sender, Telerik.Windows.RadRoutedEventArgs e)
        {
            SwitchingLanguage(((RadMenuItem)sender).Tag.ToString());
        }
        protected void SwitchingLanguage(string sLanguage)
        {
            ResourceDictionary _Windows = Application.Current.Resources.MergedDictionaries[1];
            ResourceDictionary _Windows_Controls = Application.Current.Resources.MergedDictionaries[2];
            ResourceDictionary _Windows_Controls_Navigation = Application.Current.Resources.MergedDictionaries[3];
            ResourceDictionary _Windows_Controls_Docking = Application.Current.Resources.MergedDictionaries[4];
            Application.Current.Resources.MergedDictionaries.Clear(); //Clear
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(sLanguage);
            Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary()
            {
                Source = new Uri(@"/Resources/Resource." + sLanguage + ".xaml", UriKind.Relative)
            });
            Application.Current.Resources.MergedDictionaries.Add(_Windows);
            Application.Current.Resources.MergedDictionaries.Add(_Windows_Controls);
            Application.Current.Resources.MergedDictionaries.Add(_Windows_Controls_Navigation);
            Application.Current.Resources.MergedDictionaries.Add(_Windows_Controls_Docking);
        }
        private void SaveDockingLayoutToFile()
        {
            using (IsolatedStorageFile storate = IsolatedStorageFile.GetUserStoreForAssembly())
            {
                using (var isoStream = storate.OpenFile("RadDocking_Layout.xml", FileMode.Create))
                {
                    this.mainDocking.SaveLayout(isoStream);
                    isoStream.Seek(0, SeekOrigin.Begin);
                    StreamReader reader2 = new StreamReader(isoStream);
                }
            }
        }
        private void LoadDockingLayoutFromFile()
        {
            using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForAssembly())
            {
                if (storage.FileExists("RadDocking_Layout.xml"))
                {
                    using (var isoStream = storage.OpenFile("RadDocking_Layout.xml", FileMode.Open))
                    {
                        this.mainDocking.LoadLayout(isoStream);
                    }
                }
            }
        }
      
    }
}

--------------------------------------------------

App.xaml

--------------------------------------------------

<Application x:Class="WPFResourceTest.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WPFResourceTest"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/Resources/Resource.en-US.xaml"/>
                <ResourceDictionary Source="/Telerik.Windows.Themes.Green;component/Themes/System.Windows.xaml"/>
                <ResourceDictionary Source="/Telerik.Windows.Themes.Green;component/Themes/Telerik.Windows.Controls.xaml"/>
                <ResourceDictionary Source="/Telerik.Windows.Themes.Green;component/Themes/Telerik.Windows.Controls.Navigation.xaml" />
                <ResourceDictionary Source="/Telerik.Windows.Themes.Green;component/Themes/Telerik.Windows.Controls.Docking.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

--------------------------------------------------

Resource.en-US.xaml

--------------------------------------------------

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:WPFResourceTest.Resources"
                    xmlns:system="clr-namespace:System;assembly=mscorlib">
    <system:String x:Key="keyLanguage">Language</system:String>
    <system:String x:Key="keyKorean">Korean</system:String>
    <system:String x:Key="keyEnglish">English</system:String>
    <system:String x:Key="keyProjects">Projects</system:String>
    <system:String x:Key="keyContent1">Content 1</system:String>
    <system:String x:Key="keyContent2">Content 2</system:String>
    <system:String x:Key="keyProperty">Property</system:String>
</ResourceDictionary>

--------------------------------------------------

Resource.ko-KR.xaml

--------------------------------------------------

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:WPFResourceTest.Resources"
                    xmlns:system="clr-namespace:System;assembly=mscorlib">
    <system:String x:Key="keyLanguage">언어(Language)</system:String>
    <system:String x:Key="keyKorean">한국어(Korean)</system:String>
    <system:String x:Key="keyEnglish">영어(English)</system:String>
    <system:String x:Key="keyProjects">프로젝트(Projects)</system:String>
    <system:String x:Key="keyContent1">내용 1(Content 1)</system:String>
    <system:String x:Key="keyContent2">내용 2(Content 2)</system:String>
    <system:String x:Key="keyProperty">속성(Property)</system:String>
</ResourceDictionary>

--------------------------------------------------

 

thank you.

0
Dilyan Traykov
Telerik team
answered on 15 Sep 2017, 08:37 AM
Hello,

A similar scenario has been discussed in this forum thread. As suggested by my colleagues there, the RadDocking control saves only the Header text and the dynamic resource reference is lost in the process.

To modify this behavior, you should handle the ElementLoaded event of the control and update the header content there similarly to the approach my colleague has demonstrated in this reply.

I hope you find this helpful. If you need any further assistance, please let me know.

Regards,
Dilyan Traykov
Progress Telerik
Want to extend the target reach of your WPF applications, leveraging iOS, Android, and UWP? Try UI for Xamarin, a suite of polished and feature-rich components for the Xamarin framework, which you to write beautiful native mobile apps using a single shared C# codebase.
Tags
Docking
Asked by
F1Soft
Top achievements
Rank 1
Answers by
Dilyan Traykov
Telerik team
F1Soft
Top achievements
Rank 1
Share this question
or