问题描述
我提出了一个新问题,因为上一个问题没有正确表述(或者更准确地说,直到现在我才明白真正的问题)。
我有一个 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 (将#修改为@)