2

我正在使用 WPFToolkit 中的 WPF DataGrid,但在尝试缩放整个数据网格时遇到了问题。我最初的想法是它会非常简单,我只需对网格应用缩放变换,并在用户单击按钮时为 ScaleX、ScaleY 属性设置动画。但是这不起作用,因为滚动条被放大使其变大。我需要数据网格上的固定标题和固定列,所以我不能简单地使用数据网格之外的滚动查看器来处理滚动。我尝试的第二件事是仅缩放网格中的字体大小,但这失败了,因为在缩小字体大小时,列保持在原始宽度并且不会缩小。

最后,我认为我可以通过使用以下代码使其工作,该代码进入数据网格的视图树,并向 Scroll Content Presenter 添加比例变换。(此代码中也未显示,我以相同的方式将转换应用于标题的可视树项,以便它也可以缩放)。在我测试缩放后的水平滚动之前,我认为这很好用。(垂直滚动效果很好。)在缩放之前水平滚动很好,但是在缩放之后,当我水平滚动时,显示会变坏。很难确切地说出它在做什么,但看起来从屏幕左侧滚动的内容正在“折叠”并从左侧返回。也许它只是在左侧粉碎。有没有人有任何想法我怎么能得到这个工作,

 ScrollContentPresenter sp = (ScrollContentPresenter)
VisualTreeHelper.GetChild(
VisualTreeHelper.GetChild(
VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(dgMatrix,     0), 0), 0),2);
ScaleTransform st = new ScaleTransform(1, 1);
sp.LayoutTransform = st;
DoubleAnimation a = new DoubleAnimation();
a.By = 1.5;
a.AutoReverse = false;
a.Duration = new Duration(TimeSpan.Parse("0:0:0.25"));
st.BeginAnimation(ScaleTransform.ScaleXProperty, a);
st.BeginAnimation(ScaleTransform.ScaleYProperty, a);
4

1 回答 1

0

我想出了一个解决办法。不知道这是否与您的操作方式相同:

<toolkit:DataGrid.CellStyle>
    <Style TargetType="{x:Type toolkit:DataGridCell}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type toolkit:DataGridCell}">
                    <ContentPresenter>
                        <ContentPresenter.LayoutTransform>
                            <ScaleTransform ScaleX="{Binding Path=Value, ElementName=ZoomFactor}"
                                            ScaleY="{Binding Path=Value, ElementName=ZoomFactor}" />
                         </ContentPresenter.LayoutTransform>
                     </ContentPresenter>
                 </ControlTemplate>
             </Setter.Value>
         </Setter>
     </Style>
 </toolkit:DataGrid.CellStyle>

其中 ZoomFactor 是一个滑块:

<Slider x:Name="ZoomFactor"
        Value="1"
        Minimum=".25"
        Maximum="5"
        Width="180" Margin="0,0,5,0"/>
于 2010-05-06T14:55:13.743 回答