Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Wpf ScrollIntoView首次不工作_C#_Wpf - Fatal编程技术网

C# Wpf ScrollIntoView首次不工作

C# Wpf ScrollIntoView首次不工作,c#,wpf,C#,Wpf,我有一个ListView包含扩展器,我分配一个SelectedIndex,然后调用ScrollIntoView到SelectedItem位置。(它可以自动展开。) lv_SelectionChanged每次都被调用 private void lv_SelectionChanged(object sender, SelectionChangedEventArgs e) { foreach (Expander exp in FindVisualChildren<Expa

我有一个ListView包含扩展器,我分配一个SelectedIndex,然后调用ScrollIntoView到SelectedItem位置。(它可以自动展开。)

lv_SelectionChanged每次都被调用

private void lv_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        foreach (Expander exp in FindVisualChildren<Expander>(lv.lv))
        {
            var a = (exp.Header as StackPanel).Children[0] as TextBlock;
            if (a.Text.Equals((lv.lv.SelectedItem as User).group))
                exp.IsExpanded = true;
        }
        lv.ScrollIntoView(lv.SelectedItem);
    }
public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
        {
            if (depObj != null)
            {
                for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
                {
                    DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
                    if (child != null && child is T)
                    {
                        yield return (T)child;
                    }

                    foreach (T childOfChild in FindVisualChildren<T>(child))
                    {
                        yield return childOfChild;
                    }
                }
            }
        }
编辑


我尝试设置IsExpanded=“True”,然后它就是工作。所以,如果一开始IsExpanded=“False”,它不能滚动吗?

I user expander.BringIntoView(),那么它就工作了

<UserControl.Resources>
    <Style TargetType="{x:Type GridViewColumnHeader}">
        <Setter Property="HorizontalContentAlignment" Value="Center" />
    </Style>
    <Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <!--<Expander IsExpanded="{Binding Mode=TwoWay, Path=IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}, Mode=FindAncestor}}" MouseRightButtonDown="Expander_MouseRightButtonDown">-->
                    <Expander IsExpanded="False"  MouseRightButtonDown="Expander_MouseRightButtonDown">
                        <Expander.Header>
                            <StackPanel Orientation="Horizontal">
                                <StackPanel.ContextMenu>
                                    <ContextMenu>
                                        <MenuItem Name="mi_ExpandAll" Header="Hide Age column" Click="mi_ExpandAll_Click"/>
                                        <MenuItem Name="mi_CollapseAll" Header="None"/>
                                    </ContextMenu>
                                </StackPanel.ContextMenu>
                                <TextBlock Text="{Binding Name}" FontWeight="Bold" Foreground="Gray" FontSize="16" VerticalAlignment="Bottom"/>
                                <TextBlock Text="{Binding ItemCount}" FontSize="22" Foreground="Green" FontWeight="Bold" FontStyle="Italic" Margin="10,0,0,0" VerticalAlignment="Bottom" />
                                <TextBlock Text=" item(s)" FontSize="22" Foreground="Silver" FontStyle="Italic" VerticalAlignment="Bottom" />
                            </StackPanel>
                        </Expander.Header>
                        <ItemsPresenter>
                            <ItemsPresenter.ContextMenu>
                                <ContextMenu>
                                    <MenuItem Header="Add Item" Click="MenuItem_Click"/>
                                    <MenuItem Header="Menu Item 2">
                                        <MenuItem Header="Remove Item" Click="MenuItem_Click_1"></MenuItem>
                                        <MenuItem Header="Select last Item" Click="MenuItem_Click_2"></MenuItem>
                                    </MenuItem>
                                </ContextMenu>
                            </ItemsPresenter.ContextMenu>
                        </ItemsPresenter>
                    </Expander>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</UserControl.Resources>
<ListView Margin="10" Name="lv" Grid.Row="0" ItemsSource="{Binding GroupView}" SelectedIndex="{Binding Index}" SelectedItem="{Binding Item}" SelectionChanged="lv_SelectionChanged">
            <ListView.View>
                <GridView>
                    <local:GridViewColumnExt Header="Name" Width="120" DisplayMemberBinding="{Binding Name}"/>
                    <local:GridViewColumnExt x:Name="colAge" Header="Age" Width="50">
                        <local:GridViewColumnExt.CellTemplate>
                            <DataTemplate>
                                <Button Content="{Binding Age}"></Button>
                            </DataTemplate>
                        </local:GridViewColumnExt.CellTemplate>
                    </local:GridViewColumnExt>
                </GridView>
            </ListView.View>
            <ListView.GroupStyle>
                <GroupStyle ContainerStyle="{StaticResource GroupHeaderStyle}">
                </GroupStyle>
            </ListView.GroupStyle>
        </ListView>
private void MenuItem_Click_2(object sender, RoutedEventArgs e)
    {
        lv.SelectedIndex = 8;
    }