Auto focus parts of ListBoxItem on selection

I have a ListBox that is populated from a collection of ViewModels that uses in-place editing, which I do, having a couple of styles that I can apply to parts of the DataTemplate that make them visible / collapsed as needed. They look something like this:

<Style
    x:Key="UnselectedVisibleStyle"
    TargetType="{x:Type FrameworkElement}">
    <Setter
        Property="Visibility"
        Value="{Binding Path=IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}, Converter={StaticResource boolToVis}, ConverterParameter=False}" />
</Style>
<Style
    x:Key="SelectedVisibleStyle"
    TargetType="{x:Type FrameworkElement}">
    <Setter
        Property="Visibility"
        Value="{Binding Path=IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}, Converter={StaticResource boolToVis}, ConverterParameter=True}" />
</Style>

      

With my ListBox having its ItemTemplate set with something like:

    <ListBox.ItemTemplate>
        <DataTemplate>
             <Grid>                      
                <TextBlock
                    Text="{Binding Name}"
                    Style="{StaticResource UnselectedVisibleStyle}" />
                <TextBox
                    x:Name="textBox"
                    Text="{Binding Name}"
                    Style="{StaticResource SelectedVisibleStyle}" />
             </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>

      

This works great, but ideally I want the TextBox to be automatically selected when the user clicks the item, ideally with a good general way that I can use throughout my project and without unnecessary noise in my code.

Thank you DM.

+1


source to share


1 answer


The following change to your chosen style seemed useful to me:



<Style x:Key="SelectedVisibleStyle" TargetType="{x:Type FrameworkElement}">
    <Setter Property="Visibility" Value="{Binding Path=IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}, Converter={StaticResource boolToVis}, ConverterParameter=True}"/>
    <Style.Triggers>
        <Trigger Property="Visibility" Value="Visible">
            <Setter Property="FocusManager.FocusedElement" Value="{Binding RelativeSource={RelativeSource Self}}"/>
        </Trigger>
    </Style.Triggers>
</Style>

      

0


source







All Articles