我想把一个TextBox,一个Label和一个SymbolIcon放到一个Button中,这样整个东西都是可点击的。在开始时,您只能看到标签和符号。通过单击按钮,标签将被隐藏,并出现textBox,您可以在其中键入一些文本。通过再次单击,标签将再次出现,并输入新的文本,TextBox将消失。
我的问题是,通过将焦点设置为TextBox,按钮(父级)似乎也会聚焦,因为每次按空格键时,按钮的Click事件都会触发。我不希望这发生,而TextBox有焦点。
XAML
<Button Click="ToggleTopic"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch">
<Grid>
<TextBlock x:Name="textBlockInfoTopic"
Text=""
HorizontalAlignment="Left"
Margin="100,0,100,0"/>
<TextBox x:Name="textBoxTopic"
PlaceholderText="enter Topic..."
HorizontalAlignment="Stretch"
Margin="100,0,100,0"
Visibility="Collapsed"/>
<SymbolIcon x:Name="symbolTopicButton"
Symbol="Add"
HorizontalAlignment="Right"/>
</Grid>
</Button>
C#
private void ToggleTopic(object sender, RoutedEventArgs e)
{
if (textBoxTopic.Visibility == Visibility.Visible)
{
//non edit mode
textBoxTopic.Visibility = Visibility.Collapsed;
textBlockInfoTopic.Visibility = Visibility.Visible;
symbolTopicButton.Symbol = Symbol.Add;
textBlockInfoTopic.Text = textBoxTopic.Text;
}
else
{
//edit mode
textBoxTopic.Visibility = Visibility.Visible;
textBoxTopic.Focus(FocusState.Programmatic);
textBlockInfoTopic.Visibility = Visibility.Collapsed;
symbolTopicButton.Symbol = Symbol.Go;
textBlockInfoTopic.Text = "";
}
}
我只想阻止通过spaceBar触发事件。返回键应该触发事件。
感谢您的帮助!
d
答案 0 :(得分:1)
来自官方文件,
如果按钮具有键盘焦点,则按 Enter 键或 Space 键也会引发Click事件。您通常无法处理Button上的低级
PointerPressed
事件,因为它具有Click行为。
如果您想阻止SpaceBar
触发Click
事件,您可以覆盖按钮的OnProcessKeyboardAccelerators
方法,如下所示。
public class MyButton : Button
{
protected override void OnProcessKeyboardAccelerators(ProcessKeyboardAcceleratorEventArgs args)
{
if(args.Key == VirtualKey.Space)
{
args.Handled = true;
}
base.OnProcessKeyboardAccelerators(args);
}
}
<强>用法强>
<local:MyButton Click="ToggleTopic"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch">
<Grid IsTapEnabled="False" >
<TextBlock x:Name="textBlockInfoTopic"
Text=""
HorizontalAlignment="Left"
Margin="100,0,100,0"/>
<TextBox x:Name="textBoxTopic"
PlaceholderText="enter Topic..."
HorizontalAlignment="Stretch"
Margin="100,0,100,0"
Visibility="Collapsed"/>
<SymbolIcon x:Name="symbolTopicButton"
Symbol="Add"
HorizontalAlignment="Right"/>
</Grid>
</local:MyButton>