第一次点击按钮没有反应
Button does not respond for the first click
我有供用户输入个人 phone 号码的页面。当 TextBox 获得焦点时,会显示虚拟键盘,但是当用户完成输入 phone 数字并单击 "Next" 绿色按钮(抱歉屏幕截图上的俄语)时,第一次单击 "goes through" 按钮并关闭键盘,只有下一次单击才会激活单击事件。
任何想法如何解决这个问题?
也许页面焦点状态有一些问题,但我真的不知道。
更新:
这是我页面的 XAML
<Grid x:Name="LayoutRoot" Style="{StaticResource GeneralAppBackground}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
// Control to show the loading state
<controls:LoadingPageState x:Name="LoadingGrid" Visibility="Collapsed" Grid.RowSpan="3" Canvas.ZIndex="1" TitleOfOperation="Проверка существования кошелька..." />
<Grid Style="{StaticResource GeneralAppHeaderStyle}">
<TextBlock Text="Введите номер телефона" FontWeight="Normal" HorizontalAlignment="Center" VerticalAlignment="Center" Style="{StaticResource PageHeaderTextBlockStyle}" />
</Grid>
<Grid Grid.Row="1">
<StackPanel Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="20,0,20,0">
<TextBlock x:Uid="Greeting" Foreground="#979797" TextAlignment="Center" Margin="0,0,0,10" />
<Grid Margin="0,0,0,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" PlaceholderText="+7" FontSize="18" BorderThickness="0,0,0,2" BorderBrush="#979797" Background="Transparent" IsReadOnly="True" Margin="0,0,10,0" Template="{StaticResource DefaultTextBoxStyle}"/>
<TextBox x:Name="UserPhoneNumberInput" Grid.Column="1" IsTextPredictionEnabled="False" IsSpellCheckEnabled="False" PlaceholderText="777 123 12 12" FontSize="18" BorderThickness="0,0,0,2" BorderBrush="#979797" MaxLength="10" Background="Transparent" InputScope="TelephoneNumber" Template="{StaticResource DefaultTextBoxStyle}" TextChanged="UserPhoneNumberInput_TextChanged" />
</Grid>
<TextBlock x:Name="HintText" TextWrapping="WrapWholeWords" Foreground="#979797" TextAlignment="Center">
Ваш телефон будет использоваться в качестве номера кошелька
</TextBlock>
</StackPanel>
</Grid>
<Button x:Name="NextStepButton" Grid.Row="2" IsEnabled="False" Content="Далее" VerticalAlignment="Bottom" Style="{StaticResource WideGreenButtonStyle}" Click="NextStepButton_Click" />
</Grid>
这是我的按钮点击事件的 C# 代码
private void NextStepButton_Click(object sender, RoutedEventArgs e)
{
if (!UserPhoneNumberInput.Text.All(Char.IsDigit) || UserPhoneNumberInput.Text.Length == 0)
{
NotifyUser.ShowWrongPhoneNumberFormatMessage();
return;
}
phoneNumber = Helpers.FormatNumber(UserPhoneNumberInput.Text);
// Activate the ContentLoading ring
LoadingGrid.Visibility = Visibility.Visible;
LoadingGrid.IsProgressRingActive = true;
CheckNumber(phoneNumber);
}
在这里,如果我的 "LoadingGrid"
的 XAML 很重要
<Grid x:Name="LayoutRoot" Background="#CC000000">
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
<ProgressRing x:Name="ProgressRing" Width="50" Height="50" Foreground="White" IsActive="{x:Bind IsProgressRingActive, Mode=TwoWay}" />
<TextBlock x:Name="OperationTitle" Text="{x:Bind TitleOfOperation, Mode=TwoWay}" TextAlignment="Center" FontSize="18" Foreground="White" Margin="0,20,0,0" />
</StackPanel>
</Grid>
这是设计使然。
当您单击 NextStepButton 按钮时,UserPhoneNumberInput 文本框失去焦点,然后键盘自动消失。最有可能的是,但根据您的自定义布局模板,NextStepButton 也会稍微向下移动。当您释放鼠标按钮时(假设您使用的是模拟器),NextStepButton 此时不存在。这就是它不触发 Click 事件的原因。如您所知,按钮的默认 ClickMode 是 ClickMode.Release。我最近遇到了完全相同的问题。
您可以尝试将 IsTabStop="False" 添加到您的按钮属性中以解决此问题。
我有供用户输入个人 phone 号码的页面。当 TextBox 获得焦点时,会显示虚拟键盘,但是当用户完成输入 phone 数字并单击 "Next" 绿色按钮(抱歉屏幕截图上的俄语)时,第一次单击 "goes through" 按钮并关闭键盘,只有下一次单击才会激活单击事件。 任何想法如何解决这个问题? 也许页面焦点状态有一些问题,但我真的不知道。
更新: 这是我页面的 XAML
<Grid x:Name="LayoutRoot" Style="{StaticResource GeneralAppBackground}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
// Control to show the loading state
<controls:LoadingPageState x:Name="LoadingGrid" Visibility="Collapsed" Grid.RowSpan="3" Canvas.ZIndex="1" TitleOfOperation="Проверка существования кошелька..." />
<Grid Style="{StaticResource GeneralAppHeaderStyle}">
<TextBlock Text="Введите номер телефона" FontWeight="Normal" HorizontalAlignment="Center" VerticalAlignment="Center" Style="{StaticResource PageHeaderTextBlockStyle}" />
</Grid>
<Grid Grid.Row="1">
<StackPanel Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="20,0,20,0">
<TextBlock x:Uid="Greeting" Foreground="#979797" TextAlignment="Center" Margin="0,0,0,10" />
<Grid Margin="0,0,0,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" PlaceholderText="+7" FontSize="18" BorderThickness="0,0,0,2" BorderBrush="#979797" Background="Transparent" IsReadOnly="True" Margin="0,0,10,0" Template="{StaticResource DefaultTextBoxStyle}"/>
<TextBox x:Name="UserPhoneNumberInput" Grid.Column="1" IsTextPredictionEnabled="False" IsSpellCheckEnabled="False" PlaceholderText="777 123 12 12" FontSize="18" BorderThickness="0,0,0,2" BorderBrush="#979797" MaxLength="10" Background="Transparent" InputScope="TelephoneNumber" Template="{StaticResource DefaultTextBoxStyle}" TextChanged="UserPhoneNumberInput_TextChanged" />
</Grid>
<TextBlock x:Name="HintText" TextWrapping="WrapWholeWords" Foreground="#979797" TextAlignment="Center">
Ваш телефон будет использоваться в качестве номера кошелька
</TextBlock>
</StackPanel>
</Grid>
<Button x:Name="NextStepButton" Grid.Row="2" IsEnabled="False" Content="Далее" VerticalAlignment="Bottom" Style="{StaticResource WideGreenButtonStyle}" Click="NextStepButton_Click" />
</Grid>
这是我的按钮点击事件的 C# 代码
private void NextStepButton_Click(object sender, RoutedEventArgs e)
{
if (!UserPhoneNumberInput.Text.All(Char.IsDigit) || UserPhoneNumberInput.Text.Length == 0)
{
NotifyUser.ShowWrongPhoneNumberFormatMessage();
return;
}
phoneNumber = Helpers.FormatNumber(UserPhoneNumberInput.Text);
// Activate the ContentLoading ring
LoadingGrid.Visibility = Visibility.Visible;
LoadingGrid.IsProgressRingActive = true;
CheckNumber(phoneNumber);
}
在这里,如果我的 "LoadingGrid"
的 XAML 很重要<Grid x:Name="LayoutRoot" Background="#CC000000">
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
<ProgressRing x:Name="ProgressRing" Width="50" Height="50" Foreground="White" IsActive="{x:Bind IsProgressRingActive, Mode=TwoWay}" />
<TextBlock x:Name="OperationTitle" Text="{x:Bind TitleOfOperation, Mode=TwoWay}" TextAlignment="Center" FontSize="18" Foreground="White" Margin="0,20,0,0" />
</StackPanel>
</Grid>
这是设计使然。
当您单击 NextStepButton 按钮时,UserPhoneNumberInput 文本框失去焦点,然后键盘自动消失。最有可能的是,但根据您的自定义布局模板,NextStepButton 也会稍微向下移动。当您释放鼠标按钮时(假设您使用的是模拟器),NextStepButton 此时不存在。这就是它不触发 Click 事件的原因。如您所知,按钮的默认 ClickMode 是 ClickMode.Release。我最近遇到了完全相同的问题。
您可以尝试将 IsTabStop="False" 添加到您的按钮属性中以解决此问题。