Frage

Das folgende XAML arbeitet in einem Window ok:

<Border Width="45" Height="55" CornerRadius="10" >
    <Border.Background>
        <ImageBrush>
            <ImageBrush.ImageSource>
                <CroppedBitmap Source="profile.jpg" SourceRect="0 0 45 55"/>
            </ImageBrush.ImageSource>
        </ImageBrush>    
    </Border.Background>
</Border>

Aber wenn ich den entsprechenden Code in einem DataTemplate ich die folgenden Fehler in der Laufzeit erhalten:

  

Fehlgeschlagen Objektinitialisierung    (ISupportInitialize.EndInit). 'Source'    Eigenschaft nicht festgelegt. Fehler beim Objekt    'System.Windows.Media.Imaging.CroppedBitmap'    in Markup-Datei.
Inner Ausnahme:
   { " 'Source' Eigenschaft nicht festgelegt."}

Der einzige Unterschied ist, dass ich die CroppedBitmap die Source-Eigenschaft dagetenbundenen haben:

<CroppedBitmap Source="{Binding Photo}" SourceRect="0 0 45 55"/>

Was soll das?

UPDATE: Nach einer alten Post von Bea Stöllnitz dies ist eine Einschränkung der Quelleigenschaft der CroppedBitmap, weil es ISupportInitialize implementiert. (Diese Informationen sind auf der Seite - eine Suche auf „11.29“ und Sie werden sehen)
. Ist das immer noch ein Problem mit .NET 3.5 SP1?

War es hilfreich?

Lösung

Wenn der XAML-Parser CroppedBitmap schafft, tut sie das Äquivalent von:

var c = new CroppedBitmap();
c.BeginInit();
c.Source = ...    OR   c.SetBinding(...
c.SourceRect = ...
c.EndInit();

EndInit() erfordert Source nicht-null sein.

Wenn Sie c.Source=... sagen, wird der Wert immer vor dem EndInit () gesetzt, aber wenn man c.SetBinding(...), versucht er, die Bindung sofort zu tun, erkennt aber, dass DataContext noch nicht gesetzt worden. Deshalb ist es aufschiebt, bis später die Bindung. Wenn also EndInit() genannt wird, Source ist immer noch null.

Dies erklärt, warum Sie einen Konverter in diesem Szenario müssen.

scroll top