C# 如何以编程方式更改silverlight中的视觉状态

C# 如何以编程方式更改silverlight中的视觉状态,c#,.net,silverlight,visualstatemanager,C#,.net,Silverlight,Visualstatemanager,我有以下代码(只是ListBoxItem的Blend ControlTemplate加上两个新状态和一个事件处理程序以简化示例): xaml: 无论我尝试什么,我总是得到result=false,因此状态不会改变。因为我对视觉状态很陌生,我做错了什么 编辑: 我还尝试了以下代码来使用ListBoxItem,但也失败了: DependencyObject parent = VisualTreeHelper.GetParent(sender as FrameworkElement);

我有以下代码(只是ListBoxItem的Blend ControlTemplate加上两个新状态和一个事件处理程序以简化示例):

xaml:

无论我尝试什么,我总是得到
result=false
,因此状态不会改变。因为我对视觉状态很陌生,我做错了什么

编辑:

我还尝试了以下代码来使用ListBoxItem,但也失败了:

        DependencyObject parent = VisualTreeHelper.GetParent(sender as FrameworkElement);
        var a = ExtendedVisualStateManager.GoToElementState(parent as FrameworkElement, "Set", false);
编辑:

我想我是在看经理的时候发现问题的。它检查VisualStates是否存在,并且当前状态是否声明到边框中,而不是ListBoxItem中(检查调用VisualStateManager.GetVisualGroups是否存在)。知道为什么吗


提前感谢。

我没有使用ExtendedVisualStateManager,但我认为它不是合适的类。请尝试使用ListBoxItem(而不是边框,它是鼠标事件的发送者)作为目标控件。

您的第一个代码看起来像xml代码。试着从一些教程开始,例如。@user1929959:我不明白你的意思。第一个代码是页面的xaml代码。。。与xml无关正如我的评论所说,代码审阅是一种xml类型。如果我使用VisualStateManager.GetVisualStateGroups查询visualstate组,我会在边框中找到这些组,而不是在ListBoxItem中找到,因为它们是在边框内声明的(这是使用Blend创建的ControlTemplate)。不管怎样,我尝试了,结果是一样的,我调用了VisulTreeHelper来查找边框的父级,然后调用了VisualStateManager.GoToState和相同的…:S@SoMoS是否检查父项是否为ListBoxItem?您可能遇到了一个棘手的问题(Microsoft喜欢将一致性放在较低的优先级),因为您所做的并不是VisualStateManager通常用于的工作。我将创建一个单独的UserControl或Control,并将其放在DataTemplate中。VSM将在那时起作用。
    private void LayoutRoot_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        bool result = ExtendedVisualStateManager.GoToElementState(sender as FrameworkElement, "Set", true);
    }
        DependencyObject parent = VisualTreeHelper.GetParent(sender as FrameworkElement);
        var a = ExtendedVisualStateManager.GoToElementState(parent as FrameworkElement, "Set", false);