У меня проблемы с получением строки сетки WPF, в которой находится текстовое поле. У меня есть сетка, которая начинается с одного RowDefinition.Эта строка содержит кнопку «Добавить», которая добавляет другое определение строки в сетку под этой строкой.Эта новая строка также содержит кнопку «добавить», которая выполняет ту же функцию.
Проблема, с которой я столкнулся, заключается в том, что функция GetRow () всегда возвращает 0.
Если я объявлю кнопку вXAML, который вызывает ту же функцию, GetRow () возвращает правильное значение.Кажется, проблема связана с тем, что кнопки создаются в codebehind.
Эта функция обрабатывает событие нажатия кнопок «Добавить»:
Private Sub btnAddRow_Click(ByVal sender As System.Object, _
ByVal e As System.Windows.RoutedEventArgs)
Dim btnSender As Button = sender
Dim row As Integer
row = Grid.GetRow(btnSender)
AddRow(row)
End Sub
Функция «AddRow "добавляет новое RowDefinition в сетку, кнопку" добавить "для этой строки и несколько других элементов управления (метка, текстовое поле и т. Д.).
Private Sub AddRow(ByVal position As Integer)
Dim rd As New RowDefinition()
rd.Height = New GridLength(35, GridUnitType.Pixel)
Me.Height += 35
myGrid.RowDefinitions.Insert(position, rd)
Dim add As New Button
add.Content = "Add Row"
add.HorizontalAlignment = Windows.HorizontalAlignment.Center
add.VerticalAlignment = Windows.VerticalAlignment.Center
AddHandler add.Click, AddressOf btnAddRow_Click
Grid.SetColumn(add, 2)
Grid.SetRow(add, position)
myGrid.Children.Add(add)
End Sub
Я нашел эту тему, но использовал" e.Source "или" e.OriginalSource "не решили проблему. Grid.GetRow и Grid.GetColumn продолжают возвращаться 0
РЕДАКТИРОВАТЬ:
Вот мой код.Я вытащил его из проекта, в котором он находился, и создал новый проект для тестирования.
Class MainWindow
Private Sub btnAddRow_Click(ByVal sender As System.Object, _
ByVal e As System.Windows.RoutedEventArgs)
Dim btnSender As Button = sender
Dim row As Integer
row = Grid.GetRow(btnSender)
row = row + 1
AddRow(row)
End Sub
Private Sub AddRow(ByVal position As Integer)
If (myGrid.RowDefinitions.Count < position) Then
position = myGrid.RowDefinitions.Count
End If
For Each element In (From i As UIElement In myWaypointGrid.Children Where Grid.GetRow(i) >= position Select i).ToList()
Grid.SetRow(element, Grid.GetRow(element) + 1)
Next
Dim rd As New RowDefinition()
rd.Height = New GridLength(35, GridUnitType.Pixel)
Me.Height += 35
myGrid.RowDefinitions.Insert(position, rd)
Dim add As New Button
add.Content = "Add Row " & position
add.HorizontalAlignment = Windows.HorizontalAlignment.Center
add.VerticalAlignment = Windows.VerticalAlignment.Center
AddHandler add.Click, AddressOf btnAddRow_Click
Grid.SetColumn(add, 2)
Grid.SetRow(add, position)
myGrid.Children.Add(add)
End Sub
Private Sub MainWindow_Loaded(ByVal sender As Object, _
ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
AddRow(0)
End Sub
Конечный класс
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid Name="myGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="75" />
</Grid.ColumnDefinitions>
</Grid>
Спасибо за вашу помощь.