Я столкнулся с проблемой при преобразовании проекта WPF из vs2008 в vs2010.У меня есть DataGrid, который содержит ListBox.Каждый ListBoxItem имеет метку и кнопку.После преобразования в vs2010 кнопка больше не рендерится, а вылетает из приложения, как только оно появляется.(Т.е. приложение загружается, но когда создается ListBox, я получаю исключение NullReferenceException. Однако работает то, что удаляется событие click у кнопки, а затем оно хорошо отображается :) Такой же тип настройки с Button внутри ListBoxItem также работает, когда не внутри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 для кнопки будет удалено, оно загрузится нормально.