Disappearing panes after LoadLayout

3 posts, 0 answers
  1. Austin
    Austin avatar
    2 posts
    Member since:
    Jun 2011

    Posted 14 Nov 2011 Link to this post

    In some circumstances a RadPaneGroup will not show content using a loaded layout. Can reproduce with controls version 2011.2.1010.1040 and 2011.3.1020.1040.

    To reproduce:

    1. Dock the second pane on the right side of the split container (see docking_layout.png)
    2. Save the layout
    3. Refresh the application
    4. Load the layout
    5. Make the second pane hidden
    6. Make the second pane visible (see docking_problem.png)

    Example XAML:

    <UserControl x:Class="DockingPersistence.MainPage"
        mc:Ignorable="d"
        d:DesignHeight="300" d:DesignWidth="400">
     
        <Grid x:Name="LayoutRoot" Background="White">
            <Grid.RowDefinitions>
                <RowDefinition Height="30"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
     
            <StackPanel Orientation="Horizontal">
                <Button Content="Save Layout" Click="Save_Click"/>
                <Button Content="Load Layout" Click="Load_Click"/>
     
                <CheckBox IsChecked="{Binding FirstPaneIsHidden, Mode=TwoWay}" Content="First pane IsHidden"/>
                <CheckBox IsChecked="{Binding SecondPaneIsHidden, Mode=TwoWay}" Content="Second pane IsHidden"/>
            </StackPanel>
             
            <telerik:RadDocking x:Name="Dock" Grid.Row="2">
                <telerik:RadSplitContainer telerik:RadDocking.SerializationTag="DefaultContainer" InitialPosition="DockedBottom">
                    <telerik:RadPaneGroup x:Name="DefaultGroup" telerik:RadDocking.SerializationTag="DefaultGroup">
                        <telerik:RadPane Title="First" IsHidden="{Binding FirstPaneIsHidden, Mode=TwoWay}" telerik:RadDocking.SerializationTag="FirstPane">
                            This is the FIRST pane.
                        </telerik:RadPane>
                        <telerik:RadPane Title="Second" IsHidden="{Binding SecondPaneIsHidden, Mode=TwoWay}" telerik:RadDocking.SerializationTag="SecondPane">
                            This is the SECOND pane.
                        </telerik:RadPane>
                    </telerik:RadPaneGroup>
                </telerik:RadSplitContainer>
            </telerik:RadDocking>
        </Grid>
    </UserControl>

    Example CS:
    using System.ComponentModel;
    using System.IO;
    using System.Windows;
    using System.Windows.Controls;
    using Telerik.Windows.Controls;
     
    namespace DockingPersistence
    {
        public partial class MainPage : UserControl, INotifyPropertyChanged
        {
            public MainPage()
            {
                InitializeComponent();
                DataContext = this;
            }
     
            private bool _firstPaneIsHidden;
            public bool FirstPaneIsHidden
            {
                get { return _firstPaneIsHidden; }
                set { _firstPaneIsHidden = value; NotifyPropertyChanged("FirstPaneIsHidden"); }
            }
     
            private bool _secondPaneIsHidden;
            public bool SecondPaneIsHidden
            {
                get { return _secondPaneIsHidden; }
                set { _secondPaneIsHidden = value; NotifyPropertyChanged("SecondPaneIsHidden"); }
            }
     
            private void Save_Click(object sender, RoutedEventArgs e)
            {
                SaveFileDialog dialog = new SaveFileDialog();
                if (dialog.ShowDialog() == true)
                {
                    using (Stream stream = dialog.OpenFile())
                    {
                        Dock.SaveLayout(stream);
                    }
                }
            }
     
            private void Load_Click(object sender, RoutedEventArgs e)
            {
                OpenFileDialog dialog = new OpenFileDialog();
                if (dialog.ShowDialog() == true)
                {
                    using (Stream stream = dialog.File.OpenRead())
                    {
                        Dock.LoadLayout(stream);
                    }
                }
            }
     
            public event PropertyChangedEventHandler PropertyChanged;
            private void NotifyPropertyChanged(string property)
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs(property));
                }
            }
        }
    }



  2. Austin
    Austin avatar
    2 posts
    Member since:
    Jun 2011

    Posted 14 Nov 2011 Link to this post

    The simplest solution I've found is to not provide a serialization tag for the split container...
  3. DevCraft banner
  4. Ivo
    Admin
    Ivo avatar
    390 posts

    Posted 17 Nov 2011 Link to this post

    Hi Austin,

    As shown into this article, SerializationTag has to be applied only to RadPanes and RadPaneGroups, and not to RadSplitContainers

    Kind regards,
    Ivo
    the Telerik team

    Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get it now >>

Back to Top