user2082396
user2082396

Reputation: 33

Focus on a textbox in autocompletebox?

this is my xaml:

 <toolkit:AutoCompleteBox Name="signalNameEditor"
                         ItemsSource="{Binding MySource}"
                         SelectedItem="{Binding SelectedItem, Mode=TwoWay}"
                         IsTextCompletionEnabled="True"                             
                         FilterMode="StartsWith"
                         ValueMemberPath="Label"
                         MinimumPrefixLength="3"
                         MinimumPopulateDelay="800"
                         Style="{StaticResource autoCompleteBoxStyle}">

    <toolkit:AutoCompleteBox.ItemTemplate>            
        <DataTemplate>                
            <StackPanel>
                <TextBlock Name="textBlock" Text="{Binding Label}"/>
            </StackPanel>
         </DataTemplate>
    </toolkit:AutoCompleteBox.ItemTemplate>        
</toolkit:AutoCompleteBox>

So, how could i get textblock element in my view? I tried this:

var textBlock = signalNameEditor.FindName("textBlock");

but it is wrong. So could you help me with this or redirect me to a proper solution. Thanks in advance.

Thanks for all aswers, that worked

 var textBlock = ((StackPanel)signalNameEditor.ItemTemplate.LoadContent()).FindName("textBlock") as TextBlock;

but unfortunately I didn't get the result, that I expected. The question is how to get focus on textbox in autocompletebox, so that when focus is on autocompletebox I could write something there without double clicking. I thought that I could do something inside my view

public void SetFocus { var textBlock = ((StackPanel)signalNameEditor .ItemTemplate .LoadContent()) .FindName("textBlock") as TextBlock;
textBlock.Focus(); }

I know that there are a lot of howto examples for setting focus like this one autocompletebox focus in wpf but I can't make it work for me. Is there a solution, that I could get without writing AutoCompleteFocusableBox class?

Upvotes: 0

Views: 1696

Answers (2)

user2082396
user2082396

Reputation: 33

The solution was simplier. Actually i need to set focus on a textbox in a autocompletebox. For this purpose I used style defined as a regular style http://msdn.microsoft.com/ru-ru/library/dd728668(v=vs.95).aspx

After it in my view I could use the following:

public void SetFocus()
{
        var textbox = this.editor.Template.FindName("Text", editor) as TextBox;
        textbox.Focus();
}

Upvotes: 2

Samuel Gerges
Samuel Gerges

Reputation: 251

You can Write extension and set custom property for textbox to make it focusable

For example you can write extension class as below

public static class FocusBehavior
{
    #region Constants

    public static readonly DependencyProperty IsFocusedProperty =
        DependencyProperty.RegisterAttached("IsFocused", typeof (bool?),
            typeof (FocusBehavior), new FrameworkPropertyMetadata(IsFocusedChanged));

    #endregion

    #region Public Methods

    public static bool GetIsFocused(DependencyObject obj)
    {
        return (bool) obj.GetValue(IsFocusedProperty);
    }

    public static void SetIsFocused(DependencyObject obj, bool value)
    {
        obj.SetValue(IsFocusedProperty, value);
    }

    #endregion

    #region Event Handlers

    private static void IsFocusedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var uie = (UIElement) d;

        if ((bool) e.NewValue)
            uie.Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => Keyboard.Focus(uie)));
    }

    #endregion Event Handlers
}

Then in xaml as below:

<UserControl xmlns:behaviours="clr-namespace:Example.Views.Behaviours">


<TextBox TextWrapping="Wrap" Text="TextBox" behaviours:FocusBehavior.IsFocused={Binding IsFocused}/>

I hope that answeres your question

Upvotes: 0

Related Questions