2011-01-09 18 views
0

WPFプロジェクトをvs2008からvs2010に変換するときに問題が発生しました。 私はListBoxを含むDataGridを持っています。各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

+0

可能であれば、この動作を再現するサンプルコードを投稿してください –

答えて

0

私は自分の質問に対する答えを見つけたと信じています。 ObservableCollectionにバインドされたListBoxでは、すべてのスタイルはDynamicResourceでなければなりません。 StaticResourceを使うと3.5ではうまくいきましたが、4ではうまくいかなかったのです!これを見つけるために何時間もランダムにテストしました。ケースが閉じた

0

イベントハンドラのようなものがコードビハインドファイルから削除されたようです。最初にチェックしてください。そうでない場合はコメントしてください。

関連する問題