Кнопка WPF в DataGrid / ListBox - PullRequest
       23

Кнопка WPF в DataGrid / ListBox

0 голосов
/ 09 января 2011

Я столкнулся с проблемой при преобразовании проекта 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 для кнопки будет удалено, оно загрузится нормально.

Ответы [ 2 ]

0 голосов
/ 09 января 2011

Мне кажется, я нашел ответ на свой вопрос. В ListBox, связанном с ObservableCollection, все стили должны быть DynamicResource. Использование StaticResource хорошо работало в 3.5, но не в 4! Потребовалось несколько часов случайного тестирования всего, чтобы найти это. Дело закрыто

0 голосов
/ 09 января 2011

Похоже, ваш обработчик событий ушел из файла с выделенным кодом, сначала проверьте это.Прокомментируйте, если это не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...