设置可见性在网格中折叠的奇怪问题(c#、xaml、UWP)
Strange issue with setting visibility collapsed in grid (c#, xaml, UWP)
我正在尝试制作一个网格,该网格具有选择玩家数量(最多六个)和在文本框中输入名称的选项。网格下方有“+”和“-”按钮,用于添加或删除玩家(以两个开头)。一切正常,直到您添加第 6 位玩家然后尝试减去 1 位玩家。 Player 6 文本框和名称输入文本框保持可见,取代了 Player 5 的文本框。这是 xaml
<Grid HorizontalAlignment="Center" VerticalAlignment="Center" Width="800" Grid.Row="1" >
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<!--Headers-->
<TextBlock Style="{ThemeResource HeaderTextBlockStyle}" Grid.Row="0" Grid.Column="0" Text=""/>
<TextBlock Style="{ThemeResource HeaderTextBlockStyle}" Grid.Row="0" Grid.Column="1" Text="Name" Margin="20,0,20,0" TextAlignment="Center"/>
<TextBlock Name="PlayerOneTag" Text="Player 1" FontSize="30" Grid.Row="1" Grid.Column="0" Margin="0,20,40,20" TextAlignment="Left"/>
<TextBlock Name="PlayerTwoTag" Text="Player 2" FontSize="30" Grid.Row="2" Grid.Column="0" Margin="0,20,40,20" TextAlignment="Left"/>
<TextBlock Name="PlayerThreeTag" Text="Player 3" FontSize="30" Grid.Row="3" Grid.Column="0" Margin="0,20,40,20" TextAlignment="Left" Visibility="Collapsed"/>
<TextBlock Name="PlayerFourTag" Text="Player 4" FontSize="30" Grid.Row="4" Grid.Column="0" Margin="0,20,40,20" TextAlignment="Left" Visibility="Collapsed"/>
<TextBlock Name="PlayerFiveTag" Text="Player 5" FontSize="30" Grid.Row="5" Grid.Column="0" Margin="0,20,40,20" TextAlignment="Left" Visibility="Collapsed"/>
<TextBlock Name="PlayerSixTag" Text="Player 6" FontSize="30" Grid.Row="6" Grid.Column="0" Margin="0,20,40,20" TextAlignment="Left" Visibility="Collapsed"/>
<TextBox Name="PlayerOneName" FontSize="30" Grid.Row="1" Grid.Column="1" />
<TextBox Name="PlayerTwoName" FontSize="30" Grid.Row="2" Grid.Column="1" />
<TextBox Name="PlayerThreeName" FontSize="30" Grid.Row="3" Grid.Column="1" Visibility="Collapsed" />
<TextBox Name="PlayerFourName" FontSize="30" Grid.Row="4" Grid.Column="1" Visibility="Collapsed" />
<TextBox Name="PlayerFiveName" FontSize="30" Grid.Row="5" Grid.Column="1" Visibility="Collapsed" />
<TextBox Name="PlayerSixName" FontSize="30" Grid.Row="6" Grid.Column="1" Visibility="Collapsed"/>
<StackPanel Name="PlayerTwoButtons" Grid.Row="7" Orientation="Horizontal">
<Button Name="AddPlayerThreeButton" Tapped="AddPlayerThree" Style="{StaticResource ResourceKey=PlusButton}" Visibility="Visible"/>
</StackPanel>
<StackPanel Name="PlayerThreeButtons" Visibility="Collapsed" Grid.Row="7" Orientation="Horizontal">
<Button Name="MinusPlayerThreeButton" Tapped="MinusPlayerThree" Style="{StaticResource ResourceKey=MinusButton}" />
<Button Name="AddPlayerFourButton" Tapped="AddPlayerFour" Style="{StaticResource ResourceKey=PlusButton}" />
</StackPanel>
<StackPanel Name="PlayerFourButtons" Visibility="Collapsed" Grid.Row="7" Orientation="Horizontal" >
<Button Name="MinusPlayerFourButton" Tapped="MinusPlayerFour" Style="{StaticResource ResourceKey=MinusButton}"/>
<Button Name="AddPlayerFiveButton" Tapped="AddPlayerFive" Style="{StaticResource ResourceKey=PlusButton}" />
</StackPanel>
<StackPanel Name="PlayerFiveButtons" Grid.Row="7" Orientation="Horizontal" Visibility="Collapsed">
<Button Name="MinusPlayerFiveButton" Tapped="MinusPlayerFive" Style="{StaticResource ResourceKey=MinusButton}" />
<Button Name="AddPlayerSixButton" Tapped="AddPlayerSix" Style="{StaticResource ResourceKey=PlusButton}" />
</StackPanel>
<StackPanel Name="PlayerSixButtons" Grid.Row="7" Orientation="Horizontal" Visibility="Collapsed">
<Button Name="MinusPlayerSixButton" Tapped="MinusPlayerSix" Style="{StaticResource ResourceKey=MinusButton}" />
</StackPanel>
</Grid>
这是后面的 C# 代码
private void AddPlayerThree(object sender, TappedRoutedEventArgs e)
{
PlayerThreeName.Visibility = Visibility.Visible;
PlayerThreeTag.Visibility = Visibility.Visible;
PlayerTwoButtons.Visibility = Visibility.Collapsed;
PlayerThreeButtons.Visibility = Visibility.Visible;
}
private void AddPlayerFour(object sender, TappedRoutedEventArgs e)
{
PlayerFourName.Visibility = Visibility.Visible;
PlayerFourTag.Visibility = Visibility.Visible;
PlayerThreeButtons.Visibility = Visibility.Collapsed;
PlayerFourButtons.Visibility = Visibility.Visible;
}
private void AddPlayerFive(object sender, TappedRoutedEventArgs e)
{
PlayerFiveName.Visibility = Visibility.Visible;
PlayerFiveTag.Visibility = Visibility.Visible;
PlayerFourButtons.Visibility = Visibility.Collapsed;
PlayerFiveButtons.Visibility = Visibility.Visible;
}
private void AddPlayerSix(object sender, TappedRoutedEventArgs e)
{
PlayerSixName.Visibility = Visibility.Visible;
PlayerSixTag.Visibility = Visibility.Visible;
AddPlayerSixButton.Visibility = Visibility.Collapsed;
MinusPlayerSixButton.Visibility = Visibility.Visible;
}
private void MinusPlayerThree(object sender, TappedRoutedEventArgs e)
{
PlayerThreeName.Visibility = Visibility.Collapsed;
PlayerThreeTag.Visibility = Visibility.Collapsed;
PlayerThreeButtons.Visibility = Visibility.Collapsed;
PlayerTwoButtons.Visibility = Visibility.Visible;
}
private void MinusPlayerFour(object sender, TappedRoutedEventArgs e)
{
PlayerFourName.Visibility = Visibility.Collapsed;
PlayerFourTag.Visibility = Visibility.Collapsed;
PlayerFourButtons.Visibility = Visibility.Collapsed;
PlayerThreeButtons.Visibility = Visibility.Visible;
}
private void MinusPlayerFive(object sender, TappedRoutedEventArgs e)
{
PlayerFiveName.Visibility = Visibility.Collapsed;
PlayerFiveTag.Visibility = Visibility.Collapsed;
PlayerFiveButtons.Visibility = Visibility.Collapsed;
PlayerFourButtons.Visibility = Visibility.Visible;
}
private void MinusPlayerSix(object sender, TappedRoutedEventArgs e)
{
PlayerSixTag.Visibility = Visibility.Collapsed;
PlayerSixName.Visibility = Visibility.Collapsed;
PlayerSixButtons.Visibility = Visibility.Collapsed;
PlayerFiveButtons.Visibility = Visibility.Visible;
}
任何关于如何解决这个问题的想法,我将不胜感激!
当您添加玩家 6 时,您所做的事情与其他按钮的点击不同(我比较了不同的按钮 clicks/taps,然后发现了问题)。在 AddPlayerSix
中,您直接在按钮上工作,而不是在 StackPanel 上工作。下面的代码有效:
private void AddPlayerSix(object sender, TappedRoutedEventArgs e)
{
PlayerSixName.Visibility = Visibility.Visible;
PlayerSixTag.Visibility = Visibility.Visible;
// Your code (not working)
//AddPlayerSixButton.Visibility = Visibility.Collapsed;
//MinusPlayerSixButton.Visibility = Visibility.Visible;
// New code (works)
PlayerFiveButtons.Visibility = Visibility.Collapsed;
PlayerSixButtons.Visibility = Visibility.Visible;
}
我正在尝试制作一个网格,该网格具有选择玩家数量(最多六个)和在文本框中输入名称的选项。网格下方有“+”和“-”按钮,用于添加或删除玩家(以两个开头)。一切正常,直到您添加第 6 位玩家然后尝试减去 1 位玩家。 Player 6 文本框和名称输入文本框保持可见,取代了 Player 5 的文本框。这是 xaml
<Grid HorizontalAlignment="Center" VerticalAlignment="Center" Width="800" Grid.Row="1" >
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<!--Headers-->
<TextBlock Style="{ThemeResource HeaderTextBlockStyle}" Grid.Row="0" Grid.Column="0" Text=""/>
<TextBlock Style="{ThemeResource HeaderTextBlockStyle}" Grid.Row="0" Grid.Column="1" Text="Name" Margin="20,0,20,0" TextAlignment="Center"/>
<TextBlock Name="PlayerOneTag" Text="Player 1" FontSize="30" Grid.Row="1" Grid.Column="0" Margin="0,20,40,20" TextAlignment="Left"/>
<TextBlock Name="PlayerTwoTag" Text="Player 2" FontSize="30" Grid.Row="2" Grid.Column="0" Margin="0,20,40,20" TextAlignment="Left"/>
<TextBlock Name="PlayerThreeTag" Text="Player 3" FontSize="30" Grid.Row="3" Grid.Column="0" Margin="0,20,40,20" TextAlignment="Left" Visibility="Collapsed"/>
<TextBlock Name="PlayerFourTag" Text="Player 4" FontSize="30" Grid.Row="4" Grid.Column="0" Margin="0,20,40,20" TextAlignment="Left" Visibility="Collapsed"/>
<TextBlock Name="PlayerFiveTag" Text="Player 5" FontSize="30" Grid.Row="5" Grid.Column="0" Margin="0,20,40,20" TextAlignment="Left" Visibility="Collapsed"/>
<TextBlock Name="PlayerSixTag" Text="Player 6" FontSize="30" Grid.Row="6" Grid.Column="0" Margin="0,20,40,20" TextAlignment="Left" Visibility="Collapsed"/>
<TextBox Name="PlayerOneName" FontSize="30" Grid.Row="1" Grid.Column="1" />
<TextBox Name="PlayerTwoName" FontSize="30" Grid.Row="2" Grid.Column="1" />
<TextBox Name="PlayerThreeName" FontSize="30" Grid.Row="3" Grid.Column="1" Visibility="Collapsed" />
<TextBox Name="PlayerFourName" FontSize="30" Grid.Row="4" Grid.Column="1" Visibility="Collapsed" />
<TextBox Name="PlayerFiveName" FontSize="30" Grid.Row="5" Grid.Column="1" Visibility="Collapsed" />
<TextBox Name="PlayerSixName" FontSize="30" Grid.Row="6" Grid.Column="1" Visibility="Collapsed"/>
<StackPanel Name="PlayerTwoButtons" Grid.Row="7" Orientation="Horizontal">
<Button Name="AddPlayerThreeButton" Tapped="AddPlayerThree" Style="{StaticResource ResourceKey=PlusButton}" Visibility="Visible"/>
</StackPanel>
<StackPanel Name="PlayerThreeButtons" Visibility="Collapsed" Grid.Row="7" Orientation="Horizontal">
<Button Name="MinusPlayerThreeButton" Tapped="MinusPlayerThree" Style="{StaticResource ResourceKey=MinusButton}" />
<Button Name="AddPlayerFourButton" Tapped="AddPlayerFour" Style="{StaticResource ResourceKey=PlusButton}" />
</StackPanel>
<StackPanel Name="PlayerFourButtons" Visibility="Collapsed" Grid.Row="7" Orientation="Horizontal" >
<Button Name="MinusPlayerFourButton" Tapped="MinusPlayerFour" Style="{StaticResource ResourceKey=MinusButton}"/>
<Button Name="AddPlayerFiveButton" Tapped="AddPlayerFive" Style="{StaticResource ResourceKey=PlusButton}" />
</StackPanel>
<StackPanel Name="PlayerFiveButtons" Grid.Row="7" Orientation="Horizontal" Visibility="Collapsed">
<Button Name="MinusPlayerFiveButton" Tapped="MinusPlayerFive" Style="{StaticResource ResourceKey=MinusButton}" />
<Button Name="AddPlayerSixButton" Tapped="AddPlayerSix" Style="{StaticResource ResourceKey=PlusButton}" />
</StackPanel>
<StackPanel Name="PlayerSixButtons" Grid.Row="7" Orientation="Horizontal" Visibility="Collapsed">
<Button Name="MinusPlayerSixButton" Tapped="MinusPlayerSix" Style="{StaticResource ResourceKey=MinusButton}" />
</StackPanel>
</Grid>
这是后面的 C# 代码
private void AddPlayerThree(object sender, TappedRoutedEventArgs e)
{
PlayerThreeName.Visibility = Visibility.Visible;
PlayerThreeTag.Visibility = Visibility.Visible;
PlayerTwoButtons.Visibility = Visibility.Collapsed;
PlayerThreeButtons.Visibility = Visibility.Visible;
}
private void AddPlayerFour(object sender, TappedRoutedEventArgs e)
{
PlayerFourName.Visibility = Visibility.Visible;
PlayerFourTag.Visibility = Visibility.Visible;
PlayerThreeButtons.Visibility = Visibility.Collapsed;
PlayerFourButtons.Visibility = Visibility.Visible;
}
private void AddPlayerFive(object sender, TappedRoutedEventArgs e)
{
PlayerFiveName.Visibility = Visibility.Visible;
PlayerFiveTag.Visibility = Visibility.Visible;
PlayerFourButtons.Visibility = Visibility.Collapsed;
PlayerFiveButtons.Visibility = Visibility.Visible;
}
private void AddPlayerSix(object sender, TappedRoutedEventArgs e)
{
PlayerSixName.Visibility = Visibility.Visible;
PlayerSixTag.Visibility = Visibility.Visible;
AddPlayerSixButton.Visibility = Visibility.Collapsed;
MinusPlayerSixButton.Visibility = Visibility.Visible;
}
private void MinusPlayerThree(object sender, TappedRoutedEventArgs e)
{
PlayerThreeName.Visibility = Visibility.Collapsed;
PlayerThreeTag.Visibility = Visibility.Collapsed;
PlayerThreeButtons.Visibility = Visibility.Collapsed;
PlayerTwoButtons.Visibility = Visibility.Visible;
}
private void MinusPlayerFour(object sender, TappedRoutedEventArgs e)
{
PlayerFourName.Visibility = Visibility.Collapsed;
PlayerFourTag.Visibility = Visibility.Collapsed;
PlayerFourButtons.Visibility = Visibility.Collapsed;
PlayerThreeButtons.Visibility = Visibility.Visible;
}
private void MinusPlayerFive(object sender, TappedRoutedEventArgs e)
{
PlayerFiveName.Visibility = Visibility.Collapsed;
PlayerFiveTag.Visibility = Visibility.Collapsed;
PlayerFiveButtons.Visibility = Visibility.Collapsed;
PlayerFourButtons.Visibility = Visibility.Visible;
}
private void MinusPlayerSix(object sender, TappedRoutedEventArgs e)
{
PlayerSixTag.Visibility = Visibility.Collapsed;
PlayerSixName.Visibility = Visibility.Collapsed;
PlayerSixButtons.Visibility = Visibility.Collapsed;
PlayerFiveButtons.Visibility = Visibility.Visible;
}
任何关于如何解决这个问题的想法,我将不胜感激!
当您添加玩家 6 时,您所做的事情与其他按钮的点击不同(我比较了不同的按钮 clicks/taps,然后发现了问题)。在 AddPlayerSix
中,您直接在按钮上工作,而不是在 StackPanel 上工作。下面的代码有效:
private void AddPlayerSix(object sender, TappedRoutedEventArgs e)
{
PlayerSixName.Visibility = Visibility.Visible;
PlayerSixTag.Visibility = Visibility.Visible;
// Your code (not working)
//AddPlayerSixButton.Visibility = Visibility.Collapsed;
//MinusPlayerSixButton.Visibility = Visibility.Visible;
// New code (works)
PlayerFiveButtons.Visibility = Visibility.Collapsed;
PlayerSixButtons.Visibility = Visibility.Visible;
}