C# UWP:按钮内的文本框,如何防止空格键触发点击事件?

C# UWP:按钮内的文本框,如何防止空格键触发点击事件?,c#,button,uwp,textbox,C#,Button,Uwp,Textbox,我想把一个文本框、一个标签和一个符号图标放进一个按钮,这样整个东西都可以点击。开始时,您只能看到标签和符号。通过单击按钮,标签被隐藏,文本框出现,您可以在其中键入一些文本。再次单击,标签会再次显示新输入的文本,文本框消失 我的问题是,通过将焦点设置为文本框,按钮(父项)似乎也会进入焦点,因为每次按下空格键时,按钮的单击事件都会触发。我不希望这种情况发生,因为文本框有焦点 XAML <Button Click="ToggleTopic" HorizontalA

我想把一个文本框、一个标签和一个符号图标放进一个按钮,这样整个东西都可以点击。开始时,您只能看到标签和符号。通过单击按钮,标签被隐藏,文本框出现,您可以在其中键入一些文本。再次单击,标签会再次显示新输入的文本,文本框消失

我的问题是,通过将焦点设置为文本框,按钮(父项)似乎也会进入焦点,因为每次按下空格键时,按钮的单击事件都会触发。我不希望这种情况发生,因为文本框有焦点

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>
我只想阻止通过空格键触发事件。返回键应触发事件

谢谢你帮助我


D.

来自官方文件

如果按钮具有键盘焦点,则按Enter键或空格键也会引发单击事件。您通常无法处理按钮上的低级事件,因为它具有单击行为

如果要防止
空格键
触发
单击
事件,可以像下面这样覆盖按钮的方法

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>

<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>