Wpf 自动将ListBoxItem的部分聚焦于所选内容

Wpf 自动将ListBoxItem的部分聚焦于所选内容,wpf,xaml,Wpf,Xaml,我有一个列表框,它是从ViewModels集合中填充的,它使用就地编辑,我通过使用两种样式来实现这一点,我可以将这些样式应用到DataTemplate的某些部分,使它们根据需要可见/折叠。这些看起来像: <Style x:Key="UnselectedVisibleStyle" TargetType="{x:Type FrameworkElement}"> <Setter Property="Visibility" Val

我有一个列表框,它是从ViewModels集合中填充的,它使用就地编辑,我通过使用两种样式来实现这一点,我可以将这些样式应用到DataTemplate的某些部分,使它们根据需要可见/折叠。这些看起来像:

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

我的列表框的ItemTemplate如下所示:

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

对您选择的样式进行以下更改似乎对我有用:

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