3

WPF でのイメージ コントロールの取得ActualHeightと取得に問題があります。ActualWidthユーザーが画像ファイルを選択すると、画像コントロールのサイズに基づいて選択した画像のサイズを変更したいと考えています。

Image.ActualHeightウィンドウの初期化時にとを取得しようとしImage.ActualWidthましたが、イメージ コントロールの両方のプロパティが '0' であることがわかりました。

では、画像コントロールの寸法を取得する方法。

4

4 に答える 4

2

私の頭の上から、画像コントロールの Load イベントをサブスクライブする必要があると思いますActualHeight/Width。そのイベントが発生するまで更新されません。

于 2010-07-13T11:25:42.733 に答える
2

FrameworkElement.ActualHeightのコメントには、プロパティが実際の値を取得するまでに多少の遅れが生じる可能性があることが示されています。

このプロパティは、他の高さの入力とレイアウト システムに基づいて計算された値です。この値は、実際のレンダリング パスに基づいてレイアウト システム自体によって設定されるため、入力変更の基になる Height などのプロパティの設定値よりもわずかに遅れる場合があります。

コントロールの最終的なサイズはFrameworkElement.Arrange(-Override)によって設定されます。メソッドをオーバーライドして、基本クラスの実装を呼び出すだけです。その戻り値は、画像の実際のサイズになります。

于 2010-07-13T11:36:27.670 に答える
0

コントロールのActualSizeは、「Measure」レイアウトパスの後に設定されます(「Arrange」レイアウトパスがその場所を設定します)。他の2つの答えは役に立ちます。コンテナの「アレンジ」レイアウトパスは、その子が測定された後にのみ発生します。イメージコントロールのロードハンドラは、最初のレイアウトパスが完了した後に呼び出す必要があります。

于 2010-07-13T12:33:16.800 に答える
0

私が見つけた最善の解決策は、イメージが読み込まれるまで待つことです。

Private Sub Update_imgImage(tURI As Uri)
    imgImage.LayoutTransform = New ScaleTransform(scaleX:=1, scaleY:=1)
    Dim src As BitmapImage = New BitmapImage()
    src.BeginInit()
    src.UriSource = tURI
    src.CacheOption = BitmapCacheOption.OnLoad
    src.EndInit()
    imgImage.SetCurrentValue(Image.SourceProperty, src)
    AddHandler src.DownloadCompleted, AddressOf ImageDownloadCompleted
End Sub

次に、ImageDownloadCompleted の場合、次のものがあります。

Sub ImageDownloadCompleted(sender As Object, e As System.EventArgs)
    Dim src As BitmapImage
    src = DirectCast(sender, BitmapImage)
    Dim scaleXY As Double
    If sender.Width = 0 Then Exit Sub
    'default width is 600 for my item, if changed, then resize
    If sender.Width <> 600 Then
        scaleXY = 500 / sender.Width
        imgImage.LayoutTransform = New ScaleTransform(scaleX:=scaleXY, scaleY:=scaleXY)
    Else
        imgImage.LayoutTransform = New ScaleTransform(scaleX:=1, scaleY:=1)
    End If
    RemoveHandler src.DownloadCompleted, AddressOf ImageDownloadCompleted
End Sub

これがうまくいくことを願っています。

于 2011-12-09T19:09:45.637 に答える