将WPF项目从vs2008转换为vs2010时遇到问题。 我有一个包含ListBox的DataGrid。每个ListBoxItem都有一个Label和一个Button。转换为vs2010后,该按钮不再呈现,但会在应用程序进入视图时立即崩溃。 (即应用程序加载,但是当创建ListBox时,我得到一个NullReferenceException。虽然工作是从按钮中删除click事件然后它渲染得很好:)与ListBoxItem中的Button相同类型的设置也可以在不在里面时工作一个DataGrid。 ListBox的内容显然是动态的,但在使用静态集合时,我得到了同样的错误。同时删除CommandParam也没有任何帮助。任何指针都非常受欢迎。
代码:
<DataGrid x:Name="DgTest" AutoGenerateColumns="false">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<ListBox ItemsSource="{Binding ItemList}">
<ListBox.ItemTemplate>
<DataTemplate >
<StackPanel Style="{StaticResource hzp}">
<Label />
<Button Click="Button_Click" Content="TestButton"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
代码隐藏:
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>
现在这是奇怪的事情。如果删除了Stackpanel样式,该按钮将起作用。如果删除按钮的Click事件,它将正常加载。
答案 0 :(得分:0)
看起来您的事件处理程序已从代码隐藏文件中消失,请先检查一下。评论是否不是这样。
答案 1 :(得分:0)
我相信我找到了自己问题的答案。在绑定到ObservableCollection的ListBox中,所有样式都必须是DynamicResource。使用StaticResource在3.5但不是4中运行良好!花了几个小时随机测试一切来发现这个。案件结案