【发布时间】:2013-10-31 11:41:48
【问题描述】:
我试图找到我的问题的答案,但没有成功。没有发现有人试图做类似的事情。
我只是想在 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 自动生成事件是因为网格在每一次数据源更改时都分配了不同的单元格样式
因此数据网格可以获得不同数量的行和列,并且在缩放值 100 时,比例为 1。在缩放值 10 时,比例为 0.1。
在某些情况下,网格比滚动查看器大,它显示滚动条,这很好,但我想要的是: 绑定完成并完成上漆(生成所有内容)后,我想缩放到允许我查看所有内容的级别。如果由于数据网格太大而无法实现,我需要在 Zoom 10 (10%) 处停止。我需要缩放因子仅在列表内的刻度上停止。
我尝试遍历幻灯片刻度并设置缩放并检查滚动查看器是否仍显示滚动条,但这不起作用滚动查看器总是在一切更改之前显示值。我的意思是,如果网格是 1x1 像素,则滚动查看器滚动 ba 可见是错误的,即使它放大到足以使 1x1 网格达到 1000% 缩放,因此实际显示 1000x1000 像素和滚动条。 onve 代码完成运行我单击消息框滚动条可见性的按钮,我认为它们是真的。
似乎更改滑块值不会立即更新网格的比例变换。
所以简而言之,我只是想要一个适合的比例,并且只发生一次数据网格的每次绑定更新。我也确切地知道每次网格数据源发生变化。
谢谢
编辑数据网格。代码显示了 LayoutTransform 而不是 RenderTransform。我在测试 LayoutTransform 时复制了它,只是想看看是不是这样。无论如何,两者都适用于缩放,但缩放以适应失败
【问题讨论】:
-
如果我理解正确,我认为您需要使用
Measure方法手动确定最佳比例因子。Measure将设置DesiredSize,您可以通过将其与容器的大小进行比较来确定需要多少缩放才能获得适合的缩放比例。此外,要使其正常工作,您可能需要使用 LayoutTransform。这是有关Measure方法的信息。 msdn.microsoft.com/en-us/library/… -
好吧,我现在肯定会选择
LayoutTransform。RenderTransform不会影响DataGrid边框,但LayoutTransform会。该链接在这种情况下确实有效,因为网格始终具有未确定的宽度,除非它超过容器。但这对于我拥有的其他 2 个控件来说仍然是完美的,它们与这个有问题的控件非常相似,并且缩放将用于图像。谢谢 -
啊,我不知道
DataGrid。真可惜。不过,很高兴它在其他情况下对你有用。