2009-03-21 19 views
2

私はWPFToolkitからWPF DataGridで作業していますが、DataGrid全体をズームしようとする際に問題があります。私の最初の考えは、それが本当に簡単になるだろうということでした。私はちょうどグリッドにスケール変換を適用し、使用されたボタンをクリックしたときにScaleX、ScaleYプロパティをアニメートします。しかし、スクロールバーを大きくしてズームしたので、これは機能しませんでした。私は固定されたヘッダーと固定列が必要なので、スクロールを処理するためにデータグリッドの外でスクロールビューアを使用することはできません。私が試したもう一つは、グリッド内のフォントサイズをスケールすることでしたが、フォントサイズを縮小すると、カラムが元の幅に留まり縮みません。WPF Datagridズームの問題

最後に、データグリッドのビューツリーに入り、スクロールコンテンツプレゼンターにスケール変換を追加する以下のコードを使用して作業していると思いました。 (また、このコードには示されていませんが、同様の方法でヘッダーのビジュアルツリー項目に変換を適用し、縮尺も同様にします)。私はズーム後に水平スクロールをテストするまで、これが素晴らしいと思っていました。 (垂直スクロールは完全に機能します)。水平スクロールをすべて開始する前には問題ありませんが、ズーム後にスクロールすると表示が乱れることがあります。それが何をしているのかを正確に伝えるのは難しいですが、画面の左からスクロールしているコンテンツが「折りたたみ」され、左に戻ってくるようなものです。たぶんそれはちょうどすべての左側にぶち壊している。誰もが私はこの作業を得ることができます任意のアイデアを持っている、うまくいけば、既に非常によく動作している私の全体のDataGridを投げ捨てることなく。

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

:ZoomFactorはスライダーである

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

チャンス。 –

+0

解決策を見てうれしいです...私は同じ問題にぶつかっています。 – KrisTrip

答えて

0

私は解決策を見つけました。これは、あなたがそれをやったかではないのと同じ方法であれば知ってはいけない:私はなんとか解決策を見つけたと私は取得するときにそれを掲載する予定

<Slider x:Name="ZoomFactor" 
     Value="1" 
     Minimum=".25" 
     Maximum="5" 
     Width="180" Margin="0,0,5,0"/> 
+0

私がまだ理解していない唯一の問題は、一旦ズームすると、ズーム解除/ズームアウトした後に列のサイズが変更されないことです。 – KrisTrip

関連する問題