Bilder ausrichten in WPF canvas in der Mitte

Bin ich die Entwicklung einer Bild-viewer, basierend auf gesten mit der Kinect. Ich bin mit dem folgenden XAML-code zur Anzeige von Bildern auf einer Leinwand.

    <Canvas Background="Transparent" Height="732" VerticalAlignment="Top">
        <Image x:Name="next" Source="{Binding NextPicture}" StretchDirection="Both" Stretch="Uniform" ClipToBounds="True" SnapsToDevicePixels="True" RenderOptions.BitmapScalingMode="HighQuality" RenderTransformOrigin="0.5,0.5" Opacity="0" Grid.ColumnSpan="2" Height="732" Width="Auto" HorizontalAlignment="Center" />
        <Image x:Name="previous" Source="{Binding PreviousPicture}" StretchDirection="Both" Stretch="Uniform" ClipToBounds="True" SnapsToDevicePixels="True" RenderOptions.BitmapScalingMode="HighQuality" RenderTransformOrigin="0.5,0.5" Opacity="0" Grid.ColumnSpan="2" Height="732" Width="Auto" HorizontalAlignment="Center" />
        <Image x:Name="current" Source="{Binding Picture}" StretchDirection="Both" Stretch="Uniform" ClipToBounds="True" SnapsToDevicePixels="True" RenderOptions.BitmapScalingMode="HighQuality" RenderTransformOrigin="0.5,0.5" Grid.ColumnSpan="2" Height="732" Width="Auto" HorizontalAlignment="Center" />
    </Canvas>

Dies ist der code, der ausgeführt, in den Rücken:

    ///<summary>
    ///Gets the previous image displayed.
    ///</summary>
    public BitmapImage PreviousPicture { get; private set; }

    ///<summary>
    ///Gets the current image to be displayed.
    ///</summary>
    public BitmapImage Picture { get; private set; }

    ///<summary>
    ///Gets the next image displayed.
    ///</summary>
    public BitmapImage NextPicture { get; private set; }

Jedes mal, wenn eine Geste erkannt wird, die Eigenschaften geändert werden, wie gezeigt:

    //Setup corresponding picture if pictures are available.
                this.PreviousPicture = this.Picture;
                this.Picture = this.NextPicture;
                this.NextPicture = LoadPicture(Index + 1);

                //Notify world of change to Index and Picture.
                if (this.PropertyChanged != null)
                {
                    this.PropertyChanged(this, new PropertyChangedEventArgs("PreviousPicture"));
                    this.PropertyChanged(this, new PropertyChangedEventArgs("Picture"));
                    this.PropertyChanged(this, new PropertyChangedEventArgs("NextPicture"));
                }

Das problem ist jedoch, die Bilder, die ich auf der Leinwand bekommen, ausgerichtet nach dem Zufallsprinzip nach Links oder rechts. Auch Ihr Seitenverhältnis ändert sich manchmal. Was ich will ist, das die Bilder angezeigt werden sollen, auf der Mitte der Leinwand in Ihrem ursprünglichen Seitenverhältnis. Kann mir jemand helfen diesbezüglich?

Ich bin auch in der Lage, um das Bild auf die Mitte mit der C# - code wie folgt:

    Canvas.SetLeft(current, (1249 - current.ActualWidth) / 2);
    Canvas.SetTop(current, 0);

wo "Strom" ist der name des aktuellen Bildes im XAML-code. Es soll aber automatisch geschehen. Ist es möglich, in der XAML-code? Wenn nicht, wie kann ich es erreichen?

PS: ich bin nicht so gut in C# oder WPF. Also bitte erklären Sie in einfachen Worten, wenn möglich.

  • Gibt es einen Grund, Sie verwenden ein Canvas enthalten Steuerelemente? Ein Grid würde viel besser funktionieren, da könnte man einfach HorizontalAlignment und VerticalAlignment Ihre Bilder zu Center.
  • Ja. Ich bin eigentlich die übersetzung meiner hand koordiniert in position relativ zu dem Bildschirm und dann durch schwenken eines vergrößerten Bilds durch einstellen der 'Leinwand.Links' und 'Leinwand.Top-Eigenschaften in meinem code. Ich habe versucht, mit "Übersetzen-Transformation', aber ich konnte nicht herausfinden, ein Weg, mit diesem.
Schreibe einen Kommentar