Как закрыть SIP в WP7 User Control - PullRequest
0 голосов
/ 28 января 2011

Ранее я добавил кнопку «закрыть» в глоток, установив InputScope в Search, обработав событие key up и вызвав Focus, если Key - Enter.

Я попытался сделать то же самое в пользовательском элементе управления, содержащем текстовый блок и текстовое поле, и глоток просто не закрылся.

Вот пользовательский элемент управления:

1007 * 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();
            }
        }

    }
}

Есть идеи, что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 28 января 2011

Вы сможете добиться этого, вызвав Focus () для элемента управления, который будет принимать фокус, отличный от TextBox.Сделать что-то вроде кнопки невидимой можно, если у вас еще нет чего-то подходящего.

1 голос
/ 28 января 2011

Это то, что я сделал в одном из моих 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();
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...