是否有嵌套的视觉状态。我的意思是如果一个ParentControl有一个ChildControl并且都有它们自己的可视状态,是否可以通过设置ParentControl的状态来相应地改变ChildControl的状态。Silverlight VisualStateManager
2
A
回答
1
您需要调用GoToState
方法来更改子控件的视觉状态。
既然你需要调用一个方法,你不能在父控件的可视化状态管理器中使用Storyboard,因为这些只能动画属性。
因此,您需要在子控件中编写一些代码。监视父母的状态并做出适当的回应。
有许多不同的方法可以做到这一点,但信息的关键金块是使用VisualStateManager.GetVisualStateGroups
方法来找到你感兴趣的父VisualStateGroup
,然后附加到该组的CurrentStateChanging
事件。因此,当它感兴趣的状态正由父代转换到其可以通过GoToState
对其本身进行适当调用时,可以通知子控件中的代码。
0
我只是要声明一个新的依赖项属性:
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. Silverlight - VisualStateManager
- 2. VisualStateManager silverlight
- 3. Silverlight 4.0 VisualStateManager
- 4. Silverlight WPF VisualStateManager vs MultiDataTrigger
- 5. VisualStateManager为WPF和Silverlight
- 6. VisualStateManager Commonstate覆盖在Silverlight 4
- 7. Silverlight VisualStateManager状态列表
- 8. VisualStateManager不做任何事(silverlight)
- 9. Silverlight DataGrid:使用VisualStateManager隐藏列
- 10. Silverlight和WPF:ControlTemplate中的VisualStateManager不起作用
- 11. MVVM visualstatemanager and focus
- 12. 风格的VisualStateManager
- 13. 如何在VisualStateManager中重用故事板在Silverlight 5中
- 14. ContentControl中VisualStateManager
- 15. VisualStateManager不一致
- 16. WPF滑块VisualStateManager
- 17. VisualStatemanager和databinding
- 18. UWP - VisualStateManager - GridView的ItemStyle
- 19. 简单的XAML VisualStateManager
- 20. 如何测试VisualStateManager状态?
- 21. Windows Phone 8中的VisualStateManager
- 22. 动画不使用WPF VisualStateManager
- 23. 用户控制中的VisualStateManager
- 24. XAML- VisualStateManager不起作用
- 25. VisualStateManager引发的异常
- 26. VisualStateManager不能产生ThicknessAnimations
- 27. 在VisualStateManager中交换画笔
- 28. 什么VisualStateManager应该用于?
- 29. VisualStateManager不会跳过'非生成'转换
- 30. 使用VisualStateManager从代码切换到可视状态
我希望有更多的陈述方法。这在某种程度上迫使我每次使用它时都会对控制进行更改。我想我只需要实现一个依赖属性,它可以满足我需要,然后在父母状态中使用它。 – 2010-01-28 17:11:11
@Petar:好的,如果你需要一个更一般的解决方案来将控件粘合在一起,那么在一个附属属性中定义的一些外部对象将会分离控件。然而,你这样做,它还不存在,你需要编写一些代码来实现它。 – AnthonyWJones 2010-01-28 17:22:29