2

WPFToolkit の WPF DataGrid を使用していますが、データグリッド全体をズームしようとすると問題が発生します。私の最初の考えは、非常に簡単で、スケール変換をグリッドに適用し、使用されたボタンがクリックされたときに ScaleX、ScaleY プロパティをアニメーション化するだけだということでした。ただし、スクロールバーがズームインされて大きくなったため、これは機能しませんでした。データグリッドに固定ヘッダーと固定列が必要なので、スクロールを処理するためにデータグリッドの外でスクロールビューアーを単純に使用することはできません。私が試した2番目のことは、グリッドのフォントサイズを拡大縮小することでしたが、フォントサイズを縮小しても列が元の幅のままで縮小しないため、これは失敗しました。

最後に、データグリッドのビュー ツリーに入り、スクロール コンテンツ プレゼンターにスケール変換を追加する以下のコードを使用して、それが機能していると思いました。(このコードにも示されていませんが、同様にスケーリングされるように、同じ方法でヘッダーのビジュアル ツリー アイテムに変換を適用します)。ズーム後に水平スクロールをテストするまで、これはうまく機能していると思いました。(垂直スクロールは完全に機能します。)ズームする前は水平スクロールは問題ありませんが、ズーム後、水平にスクロールすると表示が異常になります。それが何をしているのかを正確に伝えるのは難しいですが、画面の左側からスクロールしているコンテンツが「折りたたまれて」左側に戻ってきているように見えます. たぶん、左側ですべてが粉砕されています。どうすればこれを機能させることができるか、誰にもアイデアがありますか?

 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 に答える