我正在使用具有模板列的wpf数据网格。
我只想为用户提供放大/缩小功能。
以任何方式实现这一目标?
答案 0 :(得分:9)
下面的示例使用滑块来控制文本块的缩放。
<Window x:Class="ZoomTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Slider Grid.Row="0" Name="_zoom" Minimum="1" Maximum="100" />
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
<Grid>
<TextBlock Text="DataGrid" Background="Red"/>
<Grid.LayoutTransform>
<ScaleTransform ScaleX="{Binding Path=Value, ElementName=_zoom}" ScaleY="{Binding Path=Value, ElementName=_zoom}" />
</Grid.LayoutTransform>
</Grid>
</ScrollViewer>
</Grid>
</Window>
答案 1 :(得分:3)
您可以对要缩放的元素应用缩放变换。
例如,我在Border控件中有一个图像,为了放大/缩小,我使用如下内容:
<Slider x:Name="MySlider"
Minimum="0.25"
Maximum="2.0"
SmallChange="0.25"
LargeChange="0.5"
Value="1.0" />
<Border>
<Border.LayoutTransform>
<ScaleTransform ScaleX="{Binding ElementName=MySlider, Path=Value}"
ScaleY="{Binding ElementName=MySlider, Path=Value}" />
</Border.LayoutTransform>
<Image ... />
</Border>
在我的情况下,我实际上将值绑定到MVVM属性,但上面的示例应该可行。 ScaleTransform基于滑块的值,并同等地缩放X和Y方向。滑块允许缩放从原始大小的四分之一(0.25)到原始大小的两倍(2.0),原始缩放设置为原始大小(1.0)。
答案 2 :(得分:0)
这是一个陈旧的问题,但上面的XAML解决方案引导我完成项目所需的工作。共享。
对于DataGrid XAML之外的编程控制,以下代码有效:
dataGrid.LayoutTransform = New Windows.Media.ScaleTransform(ZoomLevelX, ZoomLevelY)
其中ZoomLevelX和ZoomLevelY是浮点值。对于我的项目,X和Y坐标的缩放级别是相同的,所以我只为这两个参数使用了一个变量。此外,我的项目仅限于以下缩放系数:20%,50%,70%,80%,100%,150%,200%,300%。