Закрытие AutoCompleteBox теряет фокус на браузер - PullRequest
0 голосов
/ 29 апреля 2011

Я расширил AutoCompleteBox из Silverlight и переопределил обработчик события OnDropDownClosed. Это работает, как и ожидалось, за исключением того, что компонент теряет фокус на браузер после закрытия DropDown.

Что я должен изменить, чтобы сохранить его?

Вот мой код:

namespace ITPole.Sphere.Application.Core.Controls
{

    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Media;

    public class CustomCompleteBox : AutoCompleteBox
    {    
        public static readonly DependencyProperty SelectedAtCloseProperty =
            DependencyProperty.Register(
                "SelectedAtClose", typeof(object), typeof(CustomCompleteBox), new PropertyMetadata(null));

        public object SelectedAtClose
        {
            get
            {
                return this.GetValue(SelectedAtCloseProperty);
            }

            set
            {
                this.SetValue(SelectedAtCloseProperty, value);
            }
        }

        protected override void OnDropDownClosed(RoutedPropertyChangedEventArgs<bool> e)
        {
            base.OnDropDownClosed(e);
            this.SelectedAtClose = this.SelectedItem;

        }

        protected override void OnTextChanged(RoutedEventArgs e)
        {
            base.OnTextChanged(e);

            if (string.IsNullOrEmpty(this.Text))
            {
                this.SetValue(SelectedAtCloseProperty, null);
            }
        }

    }
}

И использование в xaml:

<Controls1:CustomCompleteBox x:Name="portfolioAutoCompleteBox"
                             Grid.Column="1"
                             Grid.ColumnSpan="2"
                             Grid.Row="1"
                             Margin="2"
                             DataContext="{Binding Portfolio}"
                             Style="{StaticResource DefaultAutoCompleteBoxStyle}"
                             ItemTemplate="{StaticResource DescriptionItemTemplate}"
                             ValueMemberBinding="{Binding Description, Mode=TwoWay}"
                             SelectedAtClose="{Binding Value, ValidatesOnDataErrors=True, Mode=TwoWay}"
                             ItemsSource="{Binding Values}"
                             Text="{Binding Text, Mode=TwoWay}"
                             Behaviors:AutoCompleteBoxBehaviors.PopulatingCommand="{Binding PopulationCommand}" />

1 Ответ

0 голосов
/ 29 апреля 2011

Какую версию Silverlight вы используете? Это работает для меня с V4.

...