2011-01-09 71 views
0

将VSF8中的WPF项目转换为vs2010时遇到了问题。 我有一个DataGrid包含一个ListBox。每个ListBoxItem都有一个标签和一个按钮。转换为vs2010后,该按钮不再呈现,但会在应用程序进入视图时立即崩溃。 (即应用程序加载,但是当ListBox被创建时,我得到一个NullReferenceException。但是,工作虽然是从按钮中删除点击事件,然后它呈现很好:)与ListBoxItem中的Button的同一类型的设置也适用于不在里面一个DataGrid。显然,ListBox的内容是动态的,但是当使用静态集合时,我会得到相同的错误。另外删除CommandParam根本没有帮助。任何指针都是最受欢迎的。DataGrid/ListBox中的WPF按钮

代码:

<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

嗨Drknezz,事件处理程序是好的,我已经双重和三重检查它。它的签名也与ListBox外的其他工作的按钮相同。 – Constanta 2011-01-09 15:22:29

回答

0

我相信我已经找到了我自己的问题的答案。在绑定到ObservableCollection的ListBox中,所有样式必须是DynamicResource。使用StaticResource在3.5中运行良好,但不是4!花了几个小时随机测试一切以找到它。案件关闭

0

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