如果其子项包含扩展器,则 ScrollViewer 不起作用

问题描述

我提出了一个新问题,因为上一个问题没有正确表述(或者更准确地说,直到现在我才明白真正的问题)。

我有一个 ListView 和一个 ItemsControl,其中有扩展器。 在这两种情况下,ScrollViewer 都无法正常工作。 对于 ListView,它永远不会工作。 对于 ItemsControl,它有点随机

如您所见,在我的模板中,我有一些扩展器,这就是导致这些问题的原因。 我尝试仅通过一个按钮来替换模板,然后 ScrollViewer 对 ItemsControl 和 ScrollViewer 都可以正常工作。

我试图在互联网上找到这个问题的解决方案,但我找到的唯一一个答案是 that one,它写的是 I fixed it by calling updateLayout method of scrollviewer control before check scrollviewer.extent property.,但我不明白它的意思。

这是我的 XAML 的一个简短示例:

<Grid Grid.Column="1" Visibility="{Binding MainTemplateVisible,Converter={StaticResource BooleanToVisibilityConverter}}">
    <Grid.RowDeFinitions>
        <RowDeFinition Height="50"/>
        <RowDeFinition Height="*"/>
        <RowDeFinition Height="auto"/>
        <RowDeFinition Height="50"/>
    </Grid.RowDeFinitions>
    <Grid.ColumnDeFinitions>
        <ColumnDeFinition Width="*"/>
        <ColumnDeFinition Width="*"/>
        <ColumnDeFinition Width="50"/>
        <ColumnDeFinition Width="*"/>
        <ColumnDeFinition Width="50"/>
    </Grid.ColumnDeFinitions>
    <Label Grid.Column="1" Content="{x:Static p:Resources.Ready}" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20"/>
    <Label Grid.Column="3" Content="{x:Static p:Resources.InProcess}" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20"/>
    <ScrollViewer x:Name="Scroll1" Grid.Row="1" Grid.Column="1" VerticalScrollBarVisibility="Visible" IsEnabled="True">
        <ItemsControl ItemsSource="{Binding SelectedGroup.ListUnicAssAwaiting}" ItemTemplate="{StaticResource TemplateListView}" SizeChanged="ItemsControl_SizeChanged"/>
    </ScrollViewer>
    <ListView Height="400" x:Name="listView2" Grid.Row="1" Grid.Column="3" ItemTemplate="{StaticResource TemplateListView}"  ItemsSource="{Binding SelectedGroup.ListUnicAssOnGoing}" >

    </ListView>
</Grid>

然后模板:

<DataTemplate x:Key="TemplateListView">
    <Expander FontWeight="Bold" IsExpanded="False">
        <Expander.Header>
            <DockPanel Height="50" Width="{Binding
                                        RelativeSource={RelativeSource
                                            Mode=FindAncestor,AncestorType={x:Type Expander}},Path=ActualWidth}">

                <Button Click="View3D_Click" DockPanel.Dock="Right" Margin="0,28,0" Height="20" Width="20" Tag="{Binding ID}">
                    <Button.Style>
                        <Style targettype="Button">
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding Path=IFC}" Value="">
                                    <Setter Property="Visibility" Value="Collapsed" />
                                </DataTrigger>
                            </Style.Triggers>

                        </Style>
                    </Button.Style>
                    <Image Source="..\img\image_3D.png" />
                </Button>
                <TextBlock Text="{Binding Name}">
                    <TextBlock.Style>
                        <Style targettype="TextBlock">
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding Path=Erreur}" Value="1">
                                    <Setter Property="Background" Value="#80FF0000" />
                                </DataTrigger>
                                <DataTrigger Binding="{Binding Path=Erreur}" Value="2">
                                    <Setter Property="Background" Value="#80FF0000" />
                                </DataTrigger>
                                <DataTrigger Binding="{Binding Path=Erreur}" Value="3">
                                    <Setter Property="Background" Value="#40FFC050" />
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </TextBlock.Style>
                </TextBlock>

            </DockPanel>


        </Expander.Header>

        <Grid>
            <Grid.ColumnDeFinitions>
                <ColumnDeFinition Width="*"/>
            </Grid.ColumnDeFinitions>
            <Grid.RowDeFinitions>
                <RowDeFinition Height="auto"/>
                <RowDeFinition Height="auto"/>
            </Grid.RowDeFinitions>
            <DataGrid BorderBrush="{StaticResource WindowBorderColor}" BorderThickness="3" ItemsSource="{Binding Path=ListUniqueAssemblies}" IsReadOnly="True" AutoGenerateColumns="False" HorizontalAlignment="Center" FontWeight="normal">
                
                <DataGrid.Columns>
                    <DataGridTextColumn Header="{x:Static p:Resources.Name}" Binding="{Binding Path=Name,UpdateSourceTrigger=PropertyChanged}" Width="100">
                        <DataGridTextColumn.ElementStyle>
                            <Style targettype="TextBlock">
                                <Setter Property="HorizontalAlignment" Value="Left" />
                                <Setter Property="Margin" Value="2,1,2,1"/>
                            </Style>
                        </DataGridTextColumn.ElementStyle>
                    </DataGridTextColumn>


                </DataGrid.Columns>
            </DataGrid>
        </Grid>
    </Expander>
</DataTemplate>

如果我像这样替换模板,一切正常

<DataTemplate x:Key="TemplateListView">
    <Button Click="View3D_Click" DockPanel.Dock="Right" Margin="0,0" Height="20" Width="20" Tag="{Binding ID}">
        <Image Source="..\img\image_3D.png" />
    </Button>

</DataTemplate>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)