MenuItem中的TextBox如果不为空则无法编辑

时间:2016-01-07 19:12:43

标签: c# wpf xaml

我有一个带有MenuItems的ContextMenu,我用它作为标准预定义范围的日期范围选择器 - 上周,上个月,依此类推。因为用户必须选择手动输入任意天数作为日期范围,我的一个MenuItems内置TextBox。输入的天数应在计划退出时保留。

enter image description here

如果TextBox为空,一切正常。我可以点击它并在里面输入任何数字。然后我点击MenuItem上的任意位置或点击Enter键并触发MenuItem.Click事件。之后我可以一次又一次地改变这个数字,一切都很好。

但是如果TextBox不为空,就像我在Loaded事件中输入保存的数字一样,那么我无法修改TextBox内容。单击它只会触发MenuItem.Click事件,而不会专注于TextBox本身。我甚至无法通过鼠标点击拖动来选择数字。

XAML:

<Button.ContextMenu>
    <ContextMenu>
    <!--Skipped previous items-->
        <MenuItem Header="This Year" Click="menuItemDataRange_Click"
                Tag="{x:Static services:DateRanges.ThisYear}" />
        <MenuItem Header="Last Year" Click="menuItemDataRange_Click"
                Tag="{x:Static services:DateRanges.LastYear}" />
        <Separator />
        <MenuItem Tag="" Click="menuItemDataRange_Click">
            <MenuItem.Header>
                <StackPanel Orientation="Horizontal">
                    <Label Content="Last" />
                    <TextBox Width="30" Name="tbCustomDataRange" Margin="2,0" />
                    <Label Content="days" />
                </StackPanel>
            </MenuItem.Header>
        </MenuItem>
    </ContextMenu>
</Button.ContextMenu>

修改Loaded事件中,我使用这行代码设置TextBox的内容。 [UIGlobal是一个包含实用程序属性的静态类]

tbCustomDataRange.Text = UIGlobal.PlayTabCustomDaysCount.ToString();

EDIT2: 我尝试解决方法并执行以下操作。 MouseEnter事件总是被触发,但是如果在代码中甚至在XAML中使用上面的行设置了Text属性,则TextBox不会获得焦点,或者选择所有内容。 / p>

    private void tbCustomDataRange_MouseEnter(object sender, MouseEventArgs e)
    {
        tbCustomDataRange.Focus();
        tbCustomDataRange.SelectAll();
    }

1 个答案:

答案 0 :(得分:0)

可能很奇怪,但我认为问题在于以前没有其他控制措施。有一次,我意识到在程序启动后,我首先想要集中TextBox。如果我与Window,Combobox或Button中的任何其他可聚焦控件进行交互,那么使用ContextMenu的TextBox一切都很好 - 它会被聚焦,文本会被选中。

所以我的解决方法是将我的Combobox设置为cbProfileSearch.Focus();事件中的焦点Loaded,现在一切正常。

如果有人可以更详细地解释,请随时编辑答案。