2012-01-09 12 views
0

텍스트 상자에있는 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> 

감사합니다.

답변

1

처음 "추가"버튼을 클릭하기 전에 AddRow 함수를 호출 한 적이 있습니까? 더 많은 코드가 없으면 왜 이것이 작동하지 않는지 말하기 어렵습니다. 그들은 모두 0을 반환 왜 그렇게 모든 버튼 즉, 0 행에 추가되고이 함수에 전달되는 위치 변수에 증가하지 않는

된다

업데이트는 실제 문제를 반영하기 위해 GetRow를 호출 할 때

+0

예, 창이로드되면 AddRow (0)가 호출됩니다. AddRow (1), AddRow (2), AddRow (3) ... 테스트를 위해 MainWindow_Loaded에 추가되면 올바르게 작동합니다. – user1139683

+0

그럼이게 말이됩니다. 모든 버튼이 Row 0에 추가되도록 위치를 증가시키지 않습니다. 따라서 클릭하면 모두 0을 반환합니다. – evasilchenko

+0

정확하게 "증가"하려고하지 않습니다. Grid.GetRow (btnSender)가 작동 중이면 새 행을 추가 할 위치가됩니다. 대신 Grid.GetRow (btnSender)는 항상 0을 반환합니다. 더 완전한 코드를 추가했습니다. "row = Grid.GetRow (btnSender)"를 "row = myGrid.RowDefinitions.Count"로 바꾸면 프로그램이 원하는 방식으로 작동합니다. – user1139683

관련 문제