텍스트 상자에있는 WPF 표의 행을 가져 오는 데 문제가 있습니다. 하나의 RowDefinition으로 시작하는 표가 있습니다. 그 행은 그 행 밑의 그리드에 다른 행 정의를 추가하는 "추가"버튼을 포함합니다. 이 새로운 행에는 동일한 기능을 수행하는 "추가"버튼도 있습니다.Grid.GetRow() 항상 0을 반환합니다.
오전 데 문제는 동일한 기능, GetRow를() 올바른 값을 반환 호출하는 XAML에서 단추를 선언하면 함수 GetRow()는 항상 0
를 반환한다는 것입니다. 문제는 버튼이 코드 숨김에서 생성된다는 사실에서 비롯된 것 같습니다.
이
은 클릭 "추가"버튼의 이벤트 처리하는 기능입니다 : 해당 행에 대한 이 기능은 "AddRow는"그리드에 새 RowDefinition을 추가
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
이 (가) "추가"버튼을, 그리고 몇 가지 다른 컨트롤 (레이블, 텍스트 상자 등).
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 and Grid.GetColumn keep returning 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>
감사합니다.
예, 창이로드되면 AddRow (0)가 호출됩니다. AddRow (1), AddRow (2), AddRow (3) ... 테스트를 위해 MainWindow_Loaded에 추가되면 올바르게 작동합니다. – user1139683
그럼이게 말이됩니다. 모든 버튼이 Row 0에 추가되도록 위치를 증가시키지 않습니다. 따라서 클릭하면 모두 0을 반환합니다. – evasilchenko
정확하게 "증가"하려고하지 않습니다. Grid.GetRow (btnSender)가 작동 중이면 새 행을 추가 할 위치가됩니다. 대신 Grid.GetRow (btnSender)는 항상 0을 반환합니다. 더 완전한 코드를 추가했습니다. "row = Grid.GetRow (btnSender)"를 "row = myGrid.RowDefinitions.Count"로 바꾸면 프로그램이 원하는 방식으로 작동합니다. – user1139683