0

我试图在没有成功的情况下找到我的问题的答案。没有发现任何人试图做类似的事情。

我只是想在 DataGrid 上设置一个默认比例因子(对象无关紧要)并让它手动编辑。现在让我更详细地解释一下。

我有一个滑块,其值范围从 10 到 100,间隔刻度为 10。

<Slider Name="sldZoom" 
        IsSnapToTickEnabled="True" 
        Height="180" 
        Orientation="Vertical" 
        TickPlacement="Both" 
        Minimum="10" 
        Maximum="100" 
        Ticks="10, 20, 30, 40, 50, 60, 70, 80, 90, 100" 
        Value="10" HorizontalAlignment="Center" />

然后我有一个具有固定高度和宽度的 ScrollViewer 用于格式目的

<ScrollViewer Name="scrZoomPanel" 
              HorizontalScrollBarVisibility="Auto" 
              VerticalScrollBarVisibility="Auto" 
              Height="500
              Width="750" 
              Background="White">

最后我在滚动查看器中有一个带有随机列和行数量的 DataGrid

<DataGrid Name="grdArrangement"
          HorizontalAlignment="Stretch" 
          HorizontalContentAlignment="Stretch" 
          VerticalAlignment="Top" 
          ItemsSource="{Binding Path=ListData}" 
          IsHitTestVisible="False" 
          CanUserAddRows="False" 
          CanUserDeleteRows="False"
          CanUserReorderColumns="False" 
          CanUserSortColumns="False" 
          HeadersVisibility="None" 
          AutoGenerateColumns="True" 
          GridLinesVisibility="None" 
          SelectionMode="Single"       
          AutoGeneratingColumn="grdArrangement_AutoGeneratingColumn"  
          AutoGeneratedColumns="grdArrangement_AutoGeneratedColumns" 
          Background="White" >
          <DataGrid.RenderTransform>
              <ScaleTransform  
                              ScaleX="{Binding ElementName=sldZoom, Path=Value, Converter={StaticResource ZoomRatio}}" 
                              ScaleY="{Binding ElementName=sldZoom, Path=Value, Converter={StaticResource ZoomRatio}}" />
          </DataGrid.RenderTransform>
  </DataGrid>

2 自动生成事件是因为网格得到不同的单元格样式分配给它 eveytime 数据源更改

因此数据网格可以获得不同数量的行和列,并且在缩放值 100 时,比例为 1。在缩放值 10 时,比例为 0.1。

在某些情况下,网格比滚动查看器大,它显示滚动条,这很好,但我想要的是:在绑定完成和 onpaint 完成(生成的所有内容)之后,我想缩放到允许我看到所有内容的级别。如果由于数据网格太大而无法实现,我需要在 Zoom 10 (10%) 处停止。我需要缩放因子仅在列表内的刻度上停止。

我尝试遍历幻灯片刻度并设置缩放并检查滚动查看器是否仍显示滚动条,但这不起作用滚动查看器总是在一切改变之前显示值。我的意思是,如果网格是 1x1 像素,则滚动查看器滚动 ba 可见是错误的,即使它放大到足以使 1x1 网格达到 1000% 缩放,因此实际显示 1000x1000 像素和滚动条。onve 代码完成运行我单击消息框滚动条可见性的按钮,我认为它们是真的。

似乎更改滑块值不会立即更新网格的比例变换。

所以简而言之,我只想要一个 Scale To Fit 并且只发生一次数据网格的每次绑定更新。每次网格数据源更改时,我也都知道。

谢谢你

编辑数据网格。代码显示了 LayoutTransform 而不是 RenderTransform。我在测试 LayoutTransform 时复制了它,只是想看看是不是这样。无论如何,两者都适用于缩放但缩放以适应失败

4

1 回答 1

0

我开始从另一个角度看待问题并尝试得到

scrZoomPanel.ComputedHorizontalScrollBarVisibility

scrZoomPanel.ComputedHorizontalScrollBarVisibility

在更改 DataGrid 之前成为原始值以外的任何值。

所以我正在寻找一种强制刷新的方法scrZoomPanel,发现有一个功能:

scrZoomPanel.UpdateLayout();

如果我每次在尝试阅读之前都调用它,scrZoomPanel.ComputedHorizontalScrollBarVisibility那么它最终会返回给我真正的价值。

但我发现每次都需要调用它有点侵入性。想知道是否有一种方法可以在 XAML 中而不是后台代码中进行绑定更改强制刷新。

于 2013-10-22T15:53:21.733 回答