Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> VisualStates и UserControl 
V
    Опции темы
sameness
  Дата 28.4.2011, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 11.1.2010

Репутация: нет
Всего: нет



Все привет!)
Кто нибудь, подскажите плиз!! уже замучался бороться, хочется сделать как надо, но не получается..
Пытаюсь создать свой пользовательский элемент управления, который должен иметь несколько визуальных состояний. Но никак не получается это сделать, вот что я делаю:
Код

<ContentControl x:Class="TestVSM.UserControl1"
             xmlns:thisApp="clr-namespace:TestVSM"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300"
             Style="{DynamicResource UserControlStyle}">
    <ContentControl.Resources>
        <Style x:Key="UserControlStyle" TargetType="ContentControl">
            <Setter Property="Background" Value="Lavender"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ContentControl">
                        <Grid>
                            <VisualStateManager.VisualStateGroups>
                                <VisualStateGroup x:Name="MyGroup">
                                    <VisualState x:Name="State1">
                                        <Storyboard>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="UserControlContent" Storyboard.TargetProperty="(Content).Children[0].(UIElement.Visibility)">
                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="UserControlContent" Storyboard.TargetProperty="(Content).Children[1].(UIElement.Visibility)">
                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Collapsed"/>
                                            </ObjectAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="State2">
                                        <Storyboard>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="UserControlContent" Storyboard.TargetProperty="(Content).Children[1].(UIElement.Visibility)">
                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Visible"/>
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="UserControlContent" Storyboard.TargetProperty="(Content).Children[0].(UIElement.Visibility)">
                                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="Collapsed"/>
                                            </ObjectAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </VisualState>
                                </VisualStateGroup>
                            </VisualStateManager.VisualStateGroups>
                            <Border Background="{TemplateBinding Background}"/>
                            <ContentPresenter x:Name="UserControlContent"/>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ContentControl.Resources>
    <StackPanel x:Name="LayoutRoot">
        <TextBlock x:Name="State1" Text="Hello from State1"/>
        <TextBlock x:Name="State2" Text="Hello from State2"/>
    </StackPanel>
</ContentControl>


Теперь то что называется Code Behind:
Код

namespace TestVSM
{
    [TemplateVisualState(GroupName = "MyGroup", Name = "State1")]
    [TemplateVisualState(GroupName = "MyGroup", Name = "State2")]
    public partial class UserControl1 : ContentControl
    {
        public UserControl1()
        {
            InitializeComponent();

            this.LayoutUpdated += new EventHandler(UserControl1_LayoutUpdated);
        }

        void UserControl1_LayoutUpdated(object sender, EventArgs e)
        {
            VisualStateManager.GoToState(this, "State1", false);
            this.LayoutUpdated -= this.UserControl1_LayoutUpdated;
        }
    }
}


вот..
подскажите что делать?!!smile
PM MAIL   Вверх
-Mikle-
Дата 28.4.2011, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 13
Всего: 59



Немного не тем путем идешь. Читай тут для начала.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
sameness
Дата 29.4.2011, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 11.1.2010

Репутация: нет
Всего: нет



не совсем понял чем мне это поможет..
меня интересует лишь как добиться смены состояний (которые я сам и опишу) через VisualStateManager.
В данный момент вызывается исключение:
Цитата

Не удается анимировать свойство "Visibility" для "System.Windows.Controls.TextBlock" с помощью "System.Windows.Media.Animation.ObjectAnimationUsingKeyFrames"

Здесь видно, что свойство Visibility понимается и правильно распознается тип объекта TextBlock, но применить свойство не получается, интересно почему..
PM MAIL   Вверх
-Mikle-
Дата 29.4.2011, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 13
Всего: 59



Если поиграться хочешь, то пиши так:
Код

....
<DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{x:Static Visibility.Visible}"/>
....
<DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{x:Static Visibility.Collapsed}"/>
....


Цитата(sameness @  28.4.2011,  20:49 Найти цитируемый пост)
хочется сделать как надо, но не получается..
Пытаюсь создать свой пользовательский элемент управления

Но если хочешь именно так как ты написал, то читай ссылку, потому что ТАК CustomControl'ы не пишутся.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
sameness
Дата 30.4.2011, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 11.1.2010

Репутация: нет
Всего: нет



Благодарю за помощь!smile
Не понял только, почему иногда можно напрямую использовать члены перечисления Visibility (например при переопределении поведения какого нибудь элемента управления, например MouseOver для Button) а иногда, как в данном случае через {x:Static Visibility.Visible}

Это сообщение отредактировал(а) sameness - 30.4.2011, 18:18
PM MAIL   Вверх
-Mikle-
Дата 30.4.2011, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 13
Всего: 59



Потому что в одном случае, XAML-процессору известен тип, в который надо сконвертировать строку, а DiscreteObjectKeyFrame работаетс типом object.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0707 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.