WPF RenderTransform缩放问题

时间:2013-10-22 14:27:19

标签: c# wpf zoom scaling zooming

我试图找到问题的答案但没有成功。没有发现有人试图做类似的事情。

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

我有一个Slider,其值范围为10到100,Interval标记为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">

最后,我在scrollviewer中有一个随机列和行数

的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,并且只在datagrid的每次绑定更新时发生一次。每当网格数据源发生变化时,我也都知道。

谢谢

已编辑的Datagrid。代码显示LayoutTransform而不是RenderTransform。我在测试LayoutTransform时复制了,只是为了看看是不是这样。无论如何两者都适用于缩放但缩放以适合失败

1 个答案:

答案 0 :(得分:0)

我开始从另一个角度看问题并尝试获取

scrZoomPanel.ComputedHorizontalScrollBarVisibility

scrZoomPanel.ComputedHorizontalScrollBarVisibility
在更改DataGrid之前,

不是原始值。

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

scrZoomPanel.UpdateLayout();

如果我每次在尝试阅读scrZoomPanel.ComputedHorizontalScrollBarVisibility之前打电话给它,那么它最终会给我带来真正的价值。

但我发现有点需要每次都打电话。想知道是否有办法在XAML而不是后台代码中刷新绑定更改力。