2011-01-09 95 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

似乎您的事件處理程序已從代碼隱藏文件中刪除,請先檢查它。評論如果不是這樣。