1

テーブル (つまり DataGrid) にデータを表示する必要があるサーフェス用のアプリケーションを作成しています。これは素晴らしいことですが、表が ScatterViewItem コントロール (基本的には、ユーザーが回転、縮小、移動できるパネル) のタッチ操作をキャプチャします。これにより、ユーザーは ScatterViewItem を簡単に操作できなくなります。

この問題を解決するには、コントロールを画像に描画し、それを配置するだけで簡単だと思いました。私が間違っていたようです。これが私のすべての試みです:

http://pastie.org/private/gfkkv9f6apgrqi1ucspwpa (役に立つと思わない限り、これを読む必要はありません。そのため、パスティにあり、ここにはありません)

DataGrid を別のグリッドの中に入れています。そうしないと、適切に測定されないからです。

Grid g = new Grid();
g.Children.Add(dataTable);

SurfaceScrollViewer viewer = new SurfaceScrollViewer();
viewer.Content = Utility.SaveWPFControlAsImage(g);

その最後の行を次のように変更すると

viewer.Content = g;

良い表が得られます:

ここに画像の説明を入力

そうでない場合は、次のようになります。

ここに画像の説明を入力

SaveWPFControlAsImage は次のとおりです。

    public static System.Windows.Controls.Image SaveWPFControlAsImage(FrameworkElement e)
    {
        e.Measure(new System.Windows.Size(double.PositiveInfinity, double.PositiveInfinity));

        RenderTargetBitmap targetBitmap =
            new RenderTargetBitmap((int)e.DesiredSize.Width,
                                   (int)e.DesiredSize.Height,
                                   96d, 96d,
                                   PixelFormats.Default);
        targetBitmap.Render(e);

        BmpBitmapEncoder encoder = new BmpBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(targetBitmap));

        MemoryStream stream = new MemoryStream();
        encoder.Save(stream);
        BitmapImage bmp = new BitmapImage();
        bmp.BeginInit();
        bmp.StreamSource = new MemoryStream(stream.ToArray());
        bmp.EndInit();

        return new System.Windows.Controls.Image()
        {
            Source = bmp,
        };
    }

だから、私はそれを正しくレンダリングしていないだけかもしれませんし、あるいは、間違った角度でこれを行っているだけかもしれません...

4

1 に答える 1

1

WPF にVisualBrushは、特定のコントロールのライブ プレビューをキャプチャできる があります。また、特定のコントロールの入力が必要ない場合は、いつでも設定できますIsHitTestVisible="False"

于 2012-07-17T18:46:45.917 に答える