0

複数の列を持つDataGridがあります。内側の列の1つに、画像を表示しています。この画像は回転する必要があるため、必要に応じてを使用しTransformGroupて画像を拡大縮小および回転しました。

次のXAMLを使用して回転しない場合、画像は正常に表示されます。画像列の幅を変更すると、画像は期待どおりに拡大縮小されます。それはその列の範囲内にとどまります:

<GridViewColumn Header="Image" Width="200" x:Name="image_column">
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <Image Source="{Binding Path=ImagePath}" Margin="5">
            </Image>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

ここで、画像列内で必要に応じて画像を回転させようとすると、状況がおかしくなります。列はまだ回転されていない画像の幅に関連付けられており、行の高さは回転されていない画像の高さに関連付けられています。画像は左隣の空間にも侵入します。これは、私が試したXAMLの1つのバリアントです。

<GridViewColumn Header="Image" Width="200" x:Name="image_column">
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <Image Source="{Binding Path=ImagePath}" Margin="5">
                <Image.RenderTransform>
                    <TransformGroup>
                        <ScaleTransform ScaleX="0.8" ScaleY="0.8" />
                        <RotateTransform Angle="90" CenterX="0" CenterY="0" />
                        <TranslateTransform X="{Binding ElementName=image_column, Path=Width}" />
                    </TransformGroup>
                </Image.RenderTransform>
            </Image>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

上記のTranslateTransformは、少なくとも画像の右端をその列の右端に揃えるための完全なハックです。

ビューボックスを追加しようとしましたが、内部の画像を回転させて、希望どおりに拡大縮小できると思いましたが、うまくいきませんでした。

誰かが私がここで根本的に欠けているものを教えてくれ、私が解決策に取り組む方法についてのヒントを提供できますか?この時点で私が持っている唯一のアイデアは、表示する前に画像を回転させてディスクに保存することです。

4

1 に答える 1

1

LayoutTransformの代わりにプロパティを設定する必要がありますRenderTransform

<Image.LayoutTransform>
    <TransformGroup>
        <ScaleTransform ScaleX="0.8" ScaleY="0.8"/>
        <RotateTransform Angle="90"/>
    </TransformGroup>
</Image.LayoutTransform>

列幅が固定されているため、ScaleTransformは冗長であるように見えます。

<Image.LayoutTransform>
    <RotateTransform Angle="90"/>
</Image.LayoutTransform>
于 2013-03-08T16:50:59.477 に答える