Возможно ли иметь вложенные визуальные состояния. Я имею в виду, если у ParentControl есть ChildControl, и у обоих есть свои собственные визуальные состояния, возможно ли это, установив состояние ParentControl соответствующим образом изменить состояние ChildControl.Silverlight VisualStateManager
ответ
Чтобы изменить визуальное состояние дочернего элемента управления, необходимо вызвать метод GoToState
.
Поскольку вам нужно вызвать метод, вы не можете использовать Storiesboards в визуальном менеджере состояний родительского элемента управления, поскольку они могут только анимировать свойства.
Следовательно, вам нужно написать код в дочернем элементе управления. Контролировать состояние родителя и отвечать соответствующим образом.
Есть целый ряд различных способов сделать это, но решающий самородок информации является использование метода VisualStateManager.GetVisualStateGroups
найти VisualStateGroup
на родителей, что вы заинтересованы в, затем прикрепить к CurrentStateChanging
событию этой группы. Следовательно, код в элементе управления Child может быть уведомлен, когда государство, в котором его заинтересовало, переходит к родительскому элементу и может называть GoToState
соответствующим образом против самого себя.
Я просто хочу, чтобы объявить новое свойство зависимостей:
public static readonly DependencyProperty StateProperty =
DependencyProperty.Register("State",
typeof(string),
typeof(TextBlockControl),
new PropertyMetadata("Top",
new PropertyChangedCallback(StateChanged)));
[Category("DigItOut"), Description("State")]
public string State
{
get
{
return this.GetValue(StateProperty).ToString();
}
set
{
this.SetValue(StateProperty, value);
}
}
private static void StateChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
{
if (!String.IsNullOrEmpty(args.NewValue.ToString()))
VisualStateManager.GoToState(sender as TextBlockControl, args.NewValue.ToString(), true);
}
, а затем просто установить его из его родителей состояние:
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="States">
<VisualState x:Name="Reverse">
<Storyboard>
<ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="textBlockControl" Storyboard.TargetProperty="(TextBlockControl.State)">
<DiscreteObjectKeyFrame KeyTime="00:00:00">
<DiscreteObjectKeyFrame.Value>
<System:String>Bottom</System:String>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Straight"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
Но если я все еще хочу контроль над использованием переходы, тогда мне придется найти другое решение. Вероятно, второе свойство.
- 1. VisualStateManager silverlight
- 2. Silverlight 4.0 VisualStateManager
- 3. Silverlight VisualStateManager список состояний
- 4. VisualStateManager для WPF и Silverlight
- 5. Silverlight DataGrid: сокрытие столбцов с помощью VisualStateManager
- 6. MVVM visualstatemanager и focus
- 7. VisualStateManager Commonstate перекрывает другое состояние, указанное в Silverlight 4
- 8. Как повторно использовать раскадровку с VisualStateManager в Silverlight 5
- 9. Состояние ReactJS и XAML VisualStateManager
- 10. Несоответствие VisualStateManager
- 11. ContentControl VisualStateManager
- 12. WPF - VisualStateManager - Как мне?
- 13. UWP - VisualStateManager - GridView ItemStyle
- 14. VisualStateManager и MVVM
- 15. WPF Slider VisualStateManager
- 16. Комбинации групп в VisualStateManager
- 17. WPF VisualStateManager Анимация Binding
- 18. Как проверить состояния VisualStateManager?
- 19. Смена кистей в VisualStateManager
- 20. Для чего нужен VisualStateManager?
- 21. изменения в подсказке VisualStateManager
- 22. VisualStateManager GoToState не работает
- 23. Почему VisualStateManager не работает?
- 24. VisualStateManager VisualGroup priority
- 25. Установить фокус в VisualStatemanager
- 26. WPF: VisualStateManager не работает
- 27. VisualStateManager throw exception
- 28. XAML VisualStateManager и RelativePanel
- 29. Visualstatemanager и привязка данных
- 30. VisualStateManager и сгенерированные переходы
Я надеялся на более декларативный подход. Это как-то заставляет меня вносить изменения в контроль каждый раз, когда я его использую. Я предполагаю, что мне просто нужно реализовать свойство зависимости, которое делает то, что мне нужно, а затем просто используйте его в родительских состояниях. –
@Petar: Хорошо, да, если вам понадобится более общее решение для склейки элементов управления, тогда какой-то внешний набор объектов, определенных в прикрепленном свойстве, отключит элементы управления. Однако вы это делаете, но этого еще не существует, и вам нужно будет написать код для его создания. – AnthonyWJones