4

Windows Phone の Silverlight の WriteableBitmap には、本当に厄介なバグがあるようです。次のコードと xaml があります。

public partial class MainPage : PhoneApplicationPage
{
    CompositeTransform rotate = new CompositeTransform();

    public MainPage()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
    {
        this.rotate.Rotation += 15;

        WriteableBitmap bmp = new WriteableBitmap(this.button, rotate);
        this.image.Source = bmp;

        Dispatcher.BeginInvoke(() => Debug.WriteLine("{0}, {1}", bmp.PixelWidth, bmp.PixelHeight));
    }
}

xaml は次のとおりです。

<Grid>
    <Button VerticalAlignment="Top"
            HorizontalAlignment="Center"
            Content="This is a textblock inside a layout"
            x:Name="button"/>

    <Image VerticalAlignment="Center"
           HorizontalAlignment="Center"
           x:Name="image"/>

    <Button VerticalAlignment="Bottom"
            Content="Rotate"
            Click="Button_Click"/>
</Grid>

下のボタンをクリックすると、複合変換を使用して書き込み可能なビットマップで上のボタンがレンダリングされます。各レンダリングの後、結果として得られるトップ ボタンの画像は前の画像よりも大きくなります。また、書き込み可能なビットマップの PixelWith および PixelHeight プロパティ値は、Image オブジェクトの RenderSize とは大きく異なります。何が起こっているのか誰にも分かりませんか?

4

1 に答える 1

1

何が起こっているのか完全にはわかりませんが、水平方向と垂直方向の配置のためにコントロールのサイズが調整され、何らかの形で問題が発生していると思います。

コントロールのStretchプロパティを に設定することでバイパスできます。このように、表示される画像は、イメージ コントロールのサイズに関係なく、常に元のサイズを維持します。ImageNone

        <Image  VerticalAlignment="Center"
                HorizontalAlignment="Center"
                Stretch="None"
                x:Name="image"/>
于 2012-08-25T18:35:37.800 に答える