我之前通过将InputScope设置为Search,处理key up事件并在Key为Enter时调用Focus来为sip添加一个“关闭”按钮。
我试图在包含文本块和文本框的用户控件中执行相同操作,并且sip不会关闭。
以下是用户控件:
XAML
<UserControl
x:Class="SlidePanels.UserControls.TextBoxControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
d:DesignWidth="480">
<StackPanel
Orientation="Vertical"
Background="{StaticResource PhoneChromeBrush}">
<TextBlock
x:Name="LabelControl"
Text="Label Control"
Style="{StaticResource PhoneTextNormalStyle}" />
<TextBox
x:Name="TextControl"
Text="Text Control"
InputScope="Search"
KeyUp="TextControl_KeyUp" />
</StackPanel>
代码:
using System.Windows.Input;
namespace SlidePanels.UserControls
{
public partial class TextBoxControl
{
public TextBoxControl()
{
InitializeComponent();
}
public string FieldName { get; set; }
public string Label
{
set { LabelControl.Text = value; }
}
public string Text
{
get { return TextControl.Text; }
set { TextControl.Text = value; }
}
private void TextControl_KeyUp(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
Focus();
}
}
}
}
任何想法我做错了什么?
答案 0 :(得分:2)
你应该能够通过在一个控件上调用Focus()来实现这个功能,该控件将接受除TextBox以外的焦点。如果您还没有其他合适的东西,可以使用不可见的按钮。
答案 1 :(得分:1)
这是我在UserControl
之一关闭SIP时所做的:
private static T FindParent<T>( UIElement control ) where T : UIElement
{
UIElement p = VisualTreeHelper.GetParent( control ) as UIElement;
if( p != null ) {
if( p is T ) {
return p as T;
} else {
return FindParent<T>( p );
}
}
return null;
}
// Loaded callback for the UserControl
private void OnUserControlLoaded( object sender, RoutedEventArgs e )
{
_parentPage = FindParent<PhoneApplicationPage>( this );
}
private void OnTextBoxKeyUp( object sender, KeyEventArgs e )
{
if( e.Key == Key.Enter ) {
if( _parentPage != null ) {
_parentPage.Focus();
}
}
}