使用Visual States时,WPF应用程序崩溃

时间:2017-09-08 16:37:46

标签: wpf

我有一个奇怪的行为......我有一个按钮

        var students = new List<Student>
        {

            new Student { StudentID = 100, Name= "aaa", Address="Add1" },
            new Student { StudentID = 101, Name= "bbb", Address="Add2" },
            new Student { StudentID = 102, Name= "ccc", Address="Add3" },
            new Student { StudentID = 103, Name= "ddd", Address="Add4" },
        };
        var scores = new List<Score>
        {
            new Score { StudentID = 100, Marks = 70 },
            new Score { StudentID = 100, Marks = 60 },
            new Score { StudentID = 100, Marks = 80 },
            new Score { StudentID = 101, Marks = 50 },
            new Score { StudentID = 101, Marks = 40 },
            new Score { StudentID = 101, Marks = 70 },
            new Score { StudentID = 102, Marks = 74 },
            new Score { StudentID = 102, Marks = 77 },
            new Score { StudentID = 102, Marks = 75 },
            new Score { StudentID = 103, Marks = 76 },
            new Score { StudentID = 103, Marks = 80 },
            new Score { StudentID = 103, Marks = 70 },
            new Score { StudentID = 103, Marks = 60 },
        };

        var result = students.GroupJoin(scores,  
                            student => student.StudentID, 
                            score => score.StudentID,     
                            (std, groupedScore) => new 
                            {
                                StudentID = std.StudentID,
                                Name = std.Name,
                                Address = std.Address,
                                AvgScore = groupedScore.Average(x => x.Marks),
                            }).ToList();

我有模板

<Button Template="{StaticResource FlatButton}">ASDF</Button>
到目前为止一切顺利。现在我启动应用程序,只要我将鼠标悬停在按钮上,应用程序就会停止。它还告诉我没有要显示的源代码行,因为所有线程当前都在处理框架代码。

现在来了。如果我删除正常状态,一切都很好。至少徘徊。当我尝试单击该按钮时,应用程序再次崩溃。如果我使用DataTemplate触发器,一切都很好。

如果我使用Microsoft reference template for buttons应用程序甚至不会弹出,它会立即崩溃。仅使用没有样式的控件模板或使用嵌入样式中的控件模板并没有什么区别

使用带有复选框的Visual States不会使应用程序崩溃...

关于究竟发生了什么的任何想法?据我所知,这应该没有缺陷。

我还在.NET 4.7上,在我的解决方案中有一些UWP,一些.NET Standard和一些.NET Framework项目,尽管它不重要。

1 个答案:

答案 0 :(得分:2)

当我用你的代码将鼠标移到按钮上时,我得到了NullReferenceException。通过以下更改,它可以正常工作。你说你无法看到异常是什么,所以我可能会看到不同的问题,但值得一试。

<VisualState Name="MouseOver">
    <VisualState.Storyboard>
        <!-- 
        WARNING 
        This was throwing an exception when TargetProperty was an 
        attribute of Storyboard. The reason for that is not known. 
        -->
        <Storyboard>
            <DoubleAnimation 
                To="0.5" 
                Duration="0:0:0.1" 
                Storyboard.TargetName="Overlay"
                Storyboard.TargetProperty="Opacity" 
                />
        </Storyboard>
    </VisualState.Storyboard>
</VisualState>

TargetName可以位于Storyboard元素上,也可以作为DoubleAnimation元素的附加属性;这对我没什么影响。但如果TargetProperty未在DoubleAnimation上用作附加属性,则会出现异常。

其他视觉状态对我来说就像你拥有它们一样。我没有任何关于为什么会出现这种情况的理论。