none
как правельно измененить размера боковой панели RRS feed

  • Вопрос

  • пытаюсь организовать выпадающий боковой список который при приближении к левому краю формы плавно бы выезжал, выезд я организовал с помощью анимации, и тут я попытался организовать возможность изменения размеров этой панели и тут у меня вылезла не большие проблемы:

    1.при изменении ширины панели анимация не изменилась и также выезжает на заданную ранее величину.

    2.постоянное мерцание компонента

    за пример брал http://professorweb.ru/my/WPF/UI_WPF/level23/23_6.php

    вопрос следующий возможно ли с помощью XAML реализовать изменение ширины панели и автоматическое изменение значения анимации на которую должна выезжать панель  

      
    • Изменено skemuze 29 апреля 2013 г. 9:33
    • Перемещено YatajgaModerator 3 мая 2013 г. 13:47
    29 апреля 2013 г. 9:25

Ответы

  • Исходя из содержимого вопроса могу дать только один ответ - только на XAML такое не сделать, нужно еще и код писать.

    А вот по остальному можно только гадать. Я бы вам предложил сделать пустой проект, реализовать там это боковое меню с анимацией и выложить, а мы в нем уже попытаемся реализовать возможность изменения размеров.


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    29 апреля 2013 г. 9:50
    Отвечающий
  • Если я правильно понял - это есть ваша анимация:

            <Storyboard x:Key="StoryboardPanelSlideListTest">
    			<ThicknessAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Margin)" Storyboard.TargetName="panelSlideListTest">
    				<EasingThicknessKeyFrame KeyTime="0" Value="0,2,0,0"/>
    				<EasingThicknessKeyFrame KeyTime="0:0:0.2" Value="0,2,2,2"/>
    			</ThicknessAnimationUsingKeyFrames>
    			<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Width)" Storyboard.TargetName="panelSlideListTest">
    				<EasingDoubleKeyFrame KeyTime="0" Value="5"/>
                    <EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="200"/>
    			</DoubleAnimationUsingKeyFrames>
    		</Storyboard>

    Чтобы изменить значения, можно сделать так:

            public MainWindow()
            {
                InitializeComponent();
    
                var storyboard = Resources["StoryboardPanelSlideListTest"] as Storyboard;
                foreach (var child in storyboard.Children)
                {
                    if (child is DoubleAnimationUsingKeyFrames)
                    {
                        var keyFrame = child as DoubleAnimationUsingKeyFrames;
                        keyFrame.KeyFrames[1].KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(2));
                        keyFrame.KeyFrames[1].Value = 500;
                    }
                }
            }
    

    Можно вставить этот код в то место, где происходит изменение размера панели.

    30 апреля 2013 г. 8:46

Все ответы

  • Исходя из содержимого вопроса могу дать только один ответ - только на XAML такое не сделать, нужно еще и код писать.

    А вот по остальному можно только гадать. Я бы вам предложил сделать пустой проект, реализовать там это боковое меню с анимацией и выложить, а мы в нем уже попытаемся реализовать возможность изменения размеров.


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    29 апреля 2013 г. 9:50
    Отвечающий
  • Если я правильно понял - это есть ваша анимация:

            <Storyboard x:Key="StoryboardPanelSlideListTest">
    			<ThicknessAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Margin)" Storyboard.TargetName="panelSlideListTest">
    				<EasingThicknessKeyFrame KeyTime="0" Value="0,2,0,0"/>
    				<EasingThicknessKeyFrame KeyTime="0:0:0.2" Value="0,2,2,2"/>
    			</ThicknessAnimationUsingKeyFrames>
    			<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Width)" Storyboard.TargetName="panelSlideListTest">
    				<EasingDoubleKeyFrame KeyTime="0" Value="5"/>
                    <EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="200"/>
    			</DoubleAnimationUsingKeyFrames>
    		</Storyboard>

    Чтобы изменить значения, можно сделать так:

            public MainWindow()
            {
                InitializeComponent();
    
                var storyboard = Resources["StoryboardPanelSlideListTest"] as Storyboard;
                foreach (var child in storyboard.Children)
                {
                    if (child is DoubleAnimationUsingKeyFrames)
                    {
                        var keyFrame = child as DoubleAnimationUsingKeyFrames;
                        keyFrame.KeyFrames[1].KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(2));
                        keyFrame.KeyFrames[1].Value = 500;
                    }
                }
            }
    

    Можно вставить этот код в то место, где происходит изменение размера панели.

    30 апреля 2013 г. 8:46