首页 > 解决方案 > 如果其子项包含扩展器,则 ScrollViewer 不起作用

问题描述

我提出了一个新问题,因为最后一个问题的表述不正确(或者更准确地说,我现在才理解真正的问题)。

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

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

我试图在互联网上找到这个问题的解决方案,但我找到的唯一一个答案是那个,它写在哪里,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,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,28,0" Height="20" Width="20" Tag="{Binding ID}">
        <Image Source="..\img\image_3D.png" />
    </Button>

</DataTemplate>

标签: c#wpfexpander

解决方案


推荐阅读