我正在开发一个 Windows 8 应用商店应用程序(使用网格应用程序模板),当我从服务器加载数据时,我想显示ProgressRing
并隐藏GridView
或ListView
(取决于应用程序是否被捕捉)将显示数据一旦完全加载。
问题是当 ViewModel 加载数据时,我需要能够更改 VisualState。
我在这里找到了我认为的解决方案,但是这段代码不会构建。
public class StateManager : DependencyObject
{
public static string GetVisualStateProperty(DependencyObject obj)
{
return (string)obj.GetValue(VisualStatePropertyProperty);
}
public static void SetVisualStateProperty(DependencyObject obj, string value)
{
obj.SetValue(VisualStatePropertyProperty, value);
}
public static readonly DependencyProperty VisualStatePropertyProperty =
DependencyProperty.RegisterAttached(
"VisualStateProperty",
typeof(string),
typeof(StateManager),
new PropertyMetadata((s, e) => //this throws the error
{
var propertyName = (string)e.NewValue;
var ctrl = s as Control;
if (ctrl == null)
throw new InvalidOperationException("This attached property only supports types derived from Control.");
System.Windows.VisualStateManager.GoToState(ctrl, (string)e.NewValue, true);
}));
}
错误:无法将 lambda 表达式转换为类型“对象”,因为它不是委托类型
有谁知道如何让链接的解决方案工作?还是有一个我完全想念的更简单的方法(我是 XAML 新手!)?
我什至不确定列出的解决方案是否会起作用,因为“Snapped”与“Full”状态是由LayoutAwarePage
模板中包含的基类管理的。