Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I am developing a custom Image control in WPF .NET 3.5 and Visual Studio 2010.

In WinForms the PicutreBox control has the SizeMode property which includes " CenterImage ".

I want my Image control to have that ability.

Is there anyway?

Thanks

My XAML code:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="768" Width="1024" xmlns:my="http://schemas.sharpsoft.net/xaml" xmlns:my1="clr-namespace:WpfApplication1">
        <my1:CustomControl1
                    x:Name="customControl11"
                    Width="206"
                    Height="197"
                    HorizontalAlignment="Left"
                    VerticalAlignment="Top"
                    Margin="18,58,0,0"
                    Stretch="Uniform"/>
    </Grid>
</Window>

My CustomControl code:

public class CustomControl1 : Image
    public CustomControl1()
        // Bitmap to Stream
        Stream ms = new MemoryStream();
        Properties.Resources.webcam_background.Save(ms, ImageFormat.Png);
        // Stream to BitmapImage
        BitmapImage bitmap = new BitmapImage();
        bitmap.BeginInit();
        bitmap.StreamSource = ms;
        bitmap.EndInit();
        // Set it
        Source = bitmap;

Where "webcam_backgroud" is a png image added by default visual studio resource editor.

I've tryed, but it is'nt getting the effect i would expect. By now it reduces my image a lot and put it on the upper left corner. None: img28.imageshack.us/img28/1783/imagestretchnone.png Uniform: img810.imageshack.us/img810/2401/imagestretchuniform.png – JoanComasFdz Jul 4, 2010 at 15:42 @unexpectedkas: Can you edit your question to include some of your XAML? The image will be drawn centered in the Image control by default, but the Image control may not be centered or stretched across its parent. For example, if your entire window is a Grid with one Image then it will be centered, but if it's a Canvas with one Image then it will be in the upper-left corner. – Quartermeister Jul 4, 2010 at 16:28 Ok, I have just did it. I setted H/V align to center and, yes, the image centers. Thanks a lot. Anyway to look it right Stretch must be "Uniform". I was confused because the control moved on window ¬¬' – JoanComasFdz Jul 4, 2010 at 17:58 Yes, I did it. but for some reason the control would present a kind of "thumbnail", not the original one. I'm thinking that is because of the way I am loding a resource, that is no using URIs. – JoanComasFdz Jul 6, 2010 at 13:42

Just give an x:name on the window, and retrieve information on its dimensions.

<Window x:Name="mainWindowContainer"
    x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="768" Width="1024" xmlns:my="http://schemas.sharpsoft.net
    [...]
</Window>

And then recall the information on the actual size of the windows from the code.Then, since you have the hosting size and the object size, it's just math. Stating a frame size all'around the background of 'frameWidth', the dimension of the image (destWidth,destHeight), you set:

        int wOffset = (((int)mainWindowContainer.ActualWidth - frameWidth * 2) - destWidth) / 2 + frameWidth;
        int hOffset = (((int)mainWindowContainer.ActualHeight - frameWidth * 2) - destHeight) / 2 + frameWidth;
        Canvas.SetLeft(image, wOffset);
        Canvas.SetTop(image, hOffset); 
        

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.