DataGrid/ListBox中的WPF按钮

DataGrid/ListBox中的WPF按钮,wpf,button,event-handling,Wpf,Button,Event Handling,我在将WPF项目从vs2008转换为vs2010时遇到了一个问题。 我有一个包含列表框的DataGrid。每个ListBoxItem都有一个标签和一个按钮。转换为vs2010后,该按钮不再渲染,但在应用程序进入视图时会立即崩溃。(即,应用程序加载,但在创建ListBox时,我得到了一个NullReferenceException。不过,有效的方法是从按钮中删除click事件,然后将其渲染为罚款:)ListBoxItem中带有按钮的相同类型的设置在不在DataGrid中时也有效。ListBox的内

我在将WPF项目从vs2008转换为vs2010时遇到了一个问题。 我有一个包含列表框的DataGrid。每个ListBoxItem都有一个标签和一个按钮。转换为vs2010后,该按钮不再渲染,但在应用程序进入视图时会立即崩溃。(即,应用程序加载,但在创建ListBox时,我得到了一个NullReferenceException。不过,有效的方法是从按钮中删除click事件,然后将其渲染为罚款:)ListBoxItem中带有按钮的相同类型的设置在不在DataGrid中时也有效。ListBox的内容显然是动态的,但是当使用静态集合时,我会得到相同的错误。此外,删除CommandParam也没有任何帮助。欢迎指点

代码:

末级

和应用内资源:

<Style TargetType="StackPanel" x:Key="hzp">
        <Setter Property="Orientation" Value="Horizontal"/>
        <Setter Property="Background" Value="Orange"/>
</Style>


现在有件奇怪的事。如果移除Stackpanel样式,则按钮将起作用。如果删除按钮的单击事件,它将正常加载

您的事件处理程序似乎已从代码隐藏文件中消失,请先检查该文件。如果不是这样,请发表评论。

我相信我已经找到了我自己问题的答案。在绑定到ObservableCollection的列表框中,所有样式都必须是DynamicSource。在3.5版中使用StaticResource效果很好,但在4版中没有!花了几个小时随机测试所有东西来找到这个。Case closed

嗨,Drknezz,事件处理程序还可以,我已经仔细检查过了。它的签名也与列表框外的其他按钮相同,如果可能的话,发布一些复制这种行为的示例代码
Imports System.Collections.ObjectModel

Class MainWindow
    Public TestList As New ObservableCollection(Of TestClass)

    Private Sub MainWindow_Loaded(ByVal sender As Object, ByVal e As     System.Windows.RoutedEventArgs) Handles Me.Loaded
    DgTest.ItemsSource = TestList
    TestList.Add(New TestClass(0))
    TestList.Add(New TestClass(1))
    End Sub

    Public Class TestClass
        Private _ItemList As New List(Of String)
        Private _id As Integer

        Public Property ItemList() As List(Of String)
        Get
            Return _ItemList
        End Get
        Set(ByVal value As List(Of String))
            _ItemList = value
        End Set
    End Property
    Public Property Id() As Integer
        Get
            Return _id
        End Get
        Set(ByVal value As Integer)
            _id = value
        End Set
    End Property


    Public Sub New(ByVal id As Integer)
        _ItemList.Add("String1")
        _id = id
    End Sub
End Class

Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)

End Sub
<Style TargetType="StackPanel" x:Key="hzp">
        <Setter Property="Orientation" Value="Horizontal"/>
        <Setter Property="Background" Value="Orange"/>
</Style>