我正在使用WPFToolkit中的WPF DataGrid,我在尝试缩放整个数据网格时遇到了问题。我最初的想法是,这将非常简单,我只需对网格应用缩放变换,并在使用时点击按钮为ScaleX,ScaleY属性设置动画。然而,这不起作用,因为滚动条被放大使其变大。我需要在数据网格上修复标题和固定列,所以我不能简单地使用datagrid外部的scrollviewer来处理滚动。我尝试的第二件事就是缩放网格中的字体大小,但这很失败,因为缩小字体大小时列保持原始宽度而不缩小。
最后,我认为通过使用下面的代码进入数据网格的视图树并使用缩放变换向Scroll Content Presenter添加了它。 (此代码中未显示,我以相同的方式将变换应用于标题的可视树项,以便它也可以缩放)。我认为这很有效,直到我在缩放后测试了水平滚动。 (垂直滚动效果很好。)在缩放之前,所有水平滚动都很好,但是在缩放之后,当我在horzonitally滚动时,显示器会变得怪异。很难准确地说出它在做什么,但它看起来像是从屏幕左侧滚动的内容是“折叠”并返回到左侧。也许它只是在左侧粉碎。有没有人有任何想法我怎么能让这个工作,希望没有丢弃我已经工作得很好的整个数据网格。
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);
答案 0 :(得分: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"/>