2008-12-15 64 views
1

我有一個ListBox從ViewModels的集合中填充,它使用了就地編輯,我做了一些樣式,我可以應用於DataTemplate的部分它們根據需要可見/摺疊。這些看起來是這樣的:自動聚焦一個ListBoxItem的選擇部分

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

有了擁有它的ItemTemplate通過像給我的列表框:

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

這工作得很好,但我想最好是讓文本框自動選擇當用戶點擊該項目,理想情況下,我可以在整個項目中使用一種很好的通用方式,並且不會在代碼隱藏中弄亂太多。

謝謝, DM。

回答

0

以下更改所選樣式似乎爲我工作:

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