我有一个带有MenuItems的ContextMenu,我用它作为标准预定义范围的日期范围选择器 - 上周,上个月,依此类推。因为用户必须选择手动输入任意天数作为日期范围,我的一个MenuItems内置TextBox。输入的天数应在计划退出时保留。
如果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();
}
答案 0 :(得分:0)
可能很奇怪,但我认为问题在于以前没有其他控制措施。有一次,我意识到在程序启动后,我首先想要集中TextBox。如果我与Window,Combobox或Button中的任何其他可聚焦控件进行交互,那么使用ContextMenu的TextBox一切都很好 - 它会被聚焦,文本会被选中。
所以我的解决方法是将我的Combobox设置为cbProfileSearch.Focus();
事件中的焦点Loaded
,现在一切正常。
如果有人可以更详细地解释,请随时编辑答案。