Question

Je l'ai sous-classé Canvas pour que je puisse passer outre sa fonction de Render. Je dois savoir comment je peux charger une image bitmap dans WPF et que rendre sur la toile. Je suis tout à fait nouveau pour WPF et je ne l'ai pas trouvé de tutoriels que vous montrer comment faire quelque chose de si apparemment trivial. Étape par étape les instructions avec des exemples seraient grands.

Était-ce utile?

La solution

Cela devrait vous aider à démarrer:

class MyCanvas : Canvas {
   protected override void OnRender (DrawingContext dc) {
      BitmapImage img = new BitmapImage (new Uri ("c:\\demo.jpg"));
      dc.DrawImage (img, new Rect (0, 0, img.PixelWidth, img.PixelHeight));
   }
}

Autres conseils

Dans WPF, il est un cas rare que vous devez remplacer OnRender surtout si tout ce que vous vouliez faire était de dessiner un BMP à un arrière-plan:

<Canvas>
    <Canvas.Background>
        <ImageBrush ImageSource="Resources\background.bmp" />
    </Canvas.Background>
    <!-- ... -->
</Canvas>

Si vous voulez peindre fond de toile, je vous conseille d'utiliser ImageBrush comme Background, « coz c'est simple que vous ne avez pas besoin de sous-classe Canvas pour remplacer Onender.

Mais je vais vous donner un code source de démonstration pour ce que vous avez demandé:

Créer une classe (je l'ai appelé ImageCanvas)

    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Media;

    namespace WpfApplication1
    {
        public class ImageCanvas : Canvas
        {
            public ImageSource CanvasImageSource
            {
                get { return (ImageSource)GetValue(CanvasImageSourceProperty); }
                set { SetValue(CanvasImageSourceProperty, value); }
            }

            public static readonly DependencyProperty CanvasImageSourceProperty =
                DependencyProperty.Register("CanvasImageSource", typeof(ImageSource),
                typeof(ImageCanvas), new FrameworkPropertyMetadata(default(ImageSource)));

            protected override void OnRender(System.Windows.Media.DrawingContext dc)
            {
                dc.DrawImage(CanvasImageSource, new Rect(this.RenderSize));
                base.OnRender(dc);
            }
        }
    }

Maintenant, vous pouvez l'utiliser comme ceci:

<Window x:Class="WpfApplication1.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1" Title="Window1" Height="300" Width="300">
    <Grid>
        <local:ImageCanvas CanvasImageSource="/Splash.png">
            <TextBlock Text="Hello From Mihir!" />
        </local:ImageCanvas>
    </Grid>
</Window>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top