#wpf #vb.net #winforms
Вопрос:
Я конвертирую приложение Winforms в WPF и запускаю эту ошибку. В приложении winforms система загружает кнопки в представление сетки данных. Поскольку в wpf нет представления datagrid, я использовал datagrid. К сожалению, все это не работает. По какой-то странной причине, которую я не могу исправить, я не могу проверить, о чем я думал, я получаю странную ошибку displayindex. Мне было интересно, может ли кто-нибудь подсказать мне альтернативу тому, что используется в приложении winforms, или сказать, работает ли то, что я написал.
Код Winforms:
Dim btn As New DataGridViewButtonColumn()
dgBoorMachine.Columns.Add(btn)
btn.HeaderText = "del"
btn.Text = "X"
btn.Name = "del"
btn.UseColumnTextForButtonValue = True
dgBoorMachine.Columns("del").Width = 30
Код WPF:
<Grid ShowGridLines="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="560"/>
<ColumnDefinition Width="425" />
<ColumnDefinition Width="560" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="156" />
<RowDefinition Height="55.2" />
<RowDefinition Height="89.6"/>
<RowDefinition Height="332.8"/>
<RowDefinition Height="217.6"/>
<RowDefinition Height="1" />
<RowDefinition Height="1" />
</Grid.RowDefinitions>
<DataGrid x:Name="dgSlijpMachine" Grid.Row="2" Grid.Column="1">
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button x:Name="btn1" Content="X" Click="btn1_Click"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid>
</Grid>
Комментарии:
1. «я получаю странную ошибку displayindex» — вы не можете получить ее из xaml. исправьте свой метод btn1_Click, скорее всего
Ответ №1:
Ошибка может быть вызвана тем, что вы пропускаетеСтолбцы> тег
вместо
<DataGrid x:Name="dgSlijpMachine" Grid.Row="2" Grid.Column="1">
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button x:Name="btn1" Content="X" Click="btn1_Click"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid>
это должно быть
<DataGrid x:Name="dgSlijpMachine" Grid.Row="2" Grid.Column="1">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button x:Name="btn1" Content="X" Click="btn1_Click"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Теперь я точно не знаю, чего вы хотите достичь. Что это сделает, так это добавит столбец с кнопкой в каждую строку, которую вы добавляете в свою сетку данных, и ничего больше. Если вы действительно хотите заполнить свою сетку данных значениями, вам следует привязаться к источнику элементов сетки данных, например.
<DataGrid x:Name="dgSlijpMachine" Grid.Row="2" Grid.Column="1" ItemsSource="{Binding MyItems}">
где myItems-это наблюдаемая коллекция или аналогичный тип.