Wpf DataGrid放大/缩小

时间:2010-06-10 09:11:22

标签: wpf datagrid

我正在使用具有模板列的wpf数据网格。

我只想为用户提供放大/缩小功能。

以任何方式实现这一目标?

3 个答案:

答案 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%。