2008-11-06 5 views
6

Ich habe einen Hintergrund für ein Bild eines Firmenlogos gesetzt. Ich möchte, dass dieses Bild an der unteren rechten Ecke der Leinwand ausgerichtet wird.
Ist es möglich, dies zu tun, oder müsste das Bild als Kind in die Leinwand eingefügt werden? Das würde mit diesem Programm nicht funktionieren, da alle Kinder des Canvas anders behandelt werden.Wie können Sie einen Canvas-Hintergrund in WPF ausrichten?

Danke

Antwort

16

Funktioniert das? (Es funktionierte für mich, jedenfalls.)

+0

Genau das, was ich brauchte. Ich habe alle Eigenschaften von ImageBrush durchgesehen, aber irgendwie habe ich diese übersehen. Vielen Dank! – Totty

+0

danke! Danke! – Fredrik

0

AFAIK Die WPF Canvas-Elemente Kind UI braucht absolute Koordinaten positioniert werden verwendet. Um den rechts unten verankerten Effekt zu erzielen, denke ich, müssten Sie das Fenster Größe ändern Ereignis, neu berechnen und wenden Sie die oberen, linken Koordinaten für das Kind Bildelement immer an der rechten unteren Ecke bleiben.

<Window x:Class="HelloWPF.Window1" xmlns... 
    Title="Window1" Height="300" Width="339"> 
    <Canvas> 
     <Image Canvas.Left="195" Canvas.Top="175" Height="87" Name="image1" Stretch="Fill" Width="122" Source="dilbert2666700071126ni1.gif"/> 
    </Canvas> 
</Window> 
+0

Nun, ja und nein. Die Lösung, nach der ich suche, würde das Canvas.Background-Bild anders positionieren. Kein Kind der Leinwand. Außerdem glaube ich, dass der einfachere Weg, das Kind wie beschrieben zu behandeln, darin besteht, Canvas.Bottom und Canvas.Right auf 0 zu setzen. – Totty

+0

Richtig du bist .. Attached Eigenschaften sind ein Schmerz zu erinnern .. so jetzt jedes Kind hat Breite und Höhe + 4 befestigte Requisiten für Leinwand namens Top, Links, unten und rechts ... sheesh! :) – Gishu

0

Wie wäre es, die Leinwand und Bild in einem Grid-Steuerelement wie so zu halten?

<Window ...> 
    <Grid> 
    <Canvas/> 
    <Image HorizontalAlignment="Right" VerticalAlignment="Bottom" .../> 
    <Grid> 
</Window> 
0

Dies ist meine Lösung mit einem Rahmen in der Leinwand, um das Bild auszurichten. Diese Lösung funktioniert gut, wenn Leinwandgröße geändert wird:

<Canvas x:Name="MiCanvas" Height="250" Width="500" Background="Aqua"> 
    <Border x:Name="MiBorderImage" 
      Width="{Binding ElementName=MiCanvas, Path=ActualWidth}" 
      Height="{Binding ElementName=MiCanvas, Path=ActualHeight}" 
      Background="Transparent"> 
     <Image x:Name="MiImage" Source="/GraphicsLibrary/Logos/MiLogo.png" 
       HorizontalAlignment="Right" 
       VerticalAlignment="Bottom" 
       Stretch="None" /> 
    </Border> 
</Canvas>