在我的WPF应用程序中,我希望菜单项具有文本框。我设法使用以下代码来做到这一点:

<Menu Height="23" HorizontalAlignment="Stretch" Name="MainMenu" VerticalAlignment="Top">
    <MenuItem Header="File">
        <MenuItem Header="Exit" Click="menuItemExit_Click" />
    </MenuItem>
    <MenuItem Header="Settings">
        <MenuItem Header="Some setting" IsCheckable="True" />
        <Separator />
        <MenuItem>
            <MenuItem.Header>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>
                    <Label Content="Some value:" Margin="0,3,6,0" Padding="0" />
                    <TextBox Margin="0,0,0,6" Grid.Column="1" />
                </Grid>
            </MenuItem.Header>
        </MenuItem>
    </MenuItem>
</Menu>

这段代码显示的菜单项与我预期的一样,但是如果我开始在文本框中输入一些值,然后将鼠标(而不是单击)从文本框菜单项中移开,则文本框将失去焦点,并且我无法继续键入,除非单击再次在文本框中。如何实现与WinForms中的文本框菜单项相同的行为?也就是说,仅当用户在文本框外单击或单击Tab键时,文本框才会失去焦点。

提前致谢。

最佳答案

如我所写,我不确定您如何使用菜单控件。
但是也许这段代码被截断可以帮助您或给您一个提示:

<TextBox Margin="0,0,0,6" Grid.Column="1" PreviewLostKeyboardFocus="OnPreviewLostKeyboardFocus"/>

以及相应的方法:
private void OnPreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
  {
     if (MainMenu.IsKeyboardFocusWithin)
     {
        e.Handled = true;
     }
  }

关于WPF TextBox MenuItem在移动鼠标时失去焦点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15496218/

10-12 06:08