Dar*_*ale 5 .net c# silverlight
我有一个Silverlight 4应用程序,其中我在XAML中定义了一些状态,并使用VisualStateManager.GoToState(this, "stateName", false)它按预期工作.
然而问题是某些州的属性被绑定到UI,因此用户可以自定义诸如颜色之类的东西.当处于该状态时(可以说是状态A),可以这样做.直到我改变到另一个状态,然后回到状态A时,更改才会反映出来.问题不是从UI到底层属性的绑定(它们具有预期值),而是需要刷新状态 - 或者至少这是我的结论.
起初我只是尝试VisualStateManager.GoToState(this, "StateA", false)但发现"如果控件已经处于stateName状态,则GoToState不执行任何操作返回true".
然后我尝试没有成功,虽然它真的不是一个很好的解决方案:
VisualStateManager.GoToState(this, "StateB", false);
VisualStateManager.GoToState(this, "StateA", false);
Run Code Online (Sandbox Code Playgroud)
有谁知道我如何强制刷新或解决方法?
更新:
我设法使用以下答案的组合并在依赖项属性更改时使用以下代码.在Storyboard.Stop()和Storyboard.Begin()似乎考虑到从UI设置的属性的新值.
if (VisualStateManager.GoToState(this, "StateA", false))
{
VisualState stateA = (VisualState)VisualStateGroup.States[0];
stateA.Storyboard.Stop();
stateA.Storyboard.Begin();
}
Run Code Online (Sandbox Code Playgroud)
这段代码应该有效:
VisualStateManager.GoToState(this, "StateB", false);
VisualStateManager.GoToState(this, "StateA", false);
Run Code Online (Sandbox Code Playgroud)
这是强制刷新的典型Silverlight/WPF方式.虽然看起来很hacky,但我在Microsoft和Silverlight工具包代码中看到了这种完全相同的方法.
现在,我的猜测是控件尚未加载,或者您在属性更改时没有调用状态更改.
你需要做两件事:
在OnApplyTemplate或控件的加载事件中,将控件置于正确的状态.在控件实际完成加载模板之前,通常会更新DependencyProperties.在这种情况下,即使您调用GoToState,也没有模板,因此没有模板,因此它不会执行任何操作.
确保在依赖项属性的属性更改处理程序中,您正在调用状态更改.
对于您的参考,您注册一个PropertyChanged处理程序,如下所示:
public static readonly DependencyProperty MinValueProperty =
DependencyProperty.Register("MinValue", typeof(double), typeof(ScaleValueConverter), new PropertyMetadata(0.0d,OnMinValuePropertyChanged));
Run Code Online (Sandbox Code Playgroud)