Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF数据网格缩放问题_Wpf_Datagrid_Wpftoolkit_Zooming - Fatal编程技术网

WPF数据网格缩放问题

WPF数据网格缩放问题,wpf,datagrid,wpftoolkit,zooming,Wpf,Datagrid,Wpftoolkit,Zooming,我正在使用WPFToolkit中的WPF数据网格,并且在尝试缩放整个数据网格时遇到了问题。我最初的想法是,这将是非常简单的,我只需将缩放变换应用到网格,并在用户单击按钮时设置ScaleX、ScaleY属性的动画。但是,这不起作用,因为滚动条被放大了。我需要datagrid上的固定标题和固定列,因此我不能简单地在datagrid之外使用scrollviewer来处理滚动。我尝试的第二件事是在网格中缩放字体大小,但这失败了,因为缩小字体大小时,列保持原始宽度,不会收缩 最后,我认为通过使用下面的代码

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

最后,我认为通过使用下面的代码,它可以进入datagrid的视图树,并向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);

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

<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"/>

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

<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"/>


我已经找到了一个可行的解决方案,并将在有机会时发布。如果能看到解决方案,我会很高兴……我遇到了相同的问题。我已经找到了一个可行的解决方案,并将在有机会时发布。如果能看到解决方案,我会很高兴……我遇到了相同的问题。我唯一没有完全弄清楚的问题是,一旦你放大,取消缩放/缩小后,列不会调整大小。我唯一没有弄清楚的问题是,一旦进行缩放,列在取消缩放/缩小后不会调整大小。