2008-12-15 3 views
1

J'ai un ListBox qui est peuplé à partir d'une collection de ViewModels, qui utilise l'édition in situ, ce que je fais en ayant quelques styles que je peux appliquer aux parties du DataTemplate qui font les visibles/effondrés selon les besoins. Ceux-ci ressemblent à:Mise au point automatique des parties d'un ListBoxItem sur la sélection

<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> 

Avec mon ListBox l'avoir est ItemTemplate donné par quelque chose comme:

<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> 

Cela fonctionne très bien, mais ce que je veux est idéalement avoir la zone de texte sélectionnée automatiquement lorsqu'un utilisateur clique l'article, idéalement d'une manière générique sympa que je peux utiliser tout au long de mon projet, et sans trop me tromper dans mon codebehind.

Merci, DM.

Répondre

0

Le changement suivant à votre style sélectionné semblait fonctionner pour moi:

<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> 
Questions connexes