How to overlay a rectangle on an image in WPF

image, overlay, wpf

Solution

Put it in a grid, and then put the rectangle in the same row and column. And use a converter to get 80% the size.

XAML:

<Window.Resources>
    <local:RectangleSizeConverter x:Key="RectangleSizeConverter" />
</Window.Resources>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
    <Image x:Name="image" Grid.Row="0" Grid.Column="0" Source="C:\on.jpg" />
    <Rectangle Height="{Binding ElementName=image, Path=ActualHeight, Converter={StaticResource RectangleSizeConverter}}" 
               Width="{Binding ElementName=image, Path=ActualWidth, Converter={StaticResource RectangleSizeConverter}}" 
               Fill="Red" Opacity=".5" />
</Grid>

C# (Converter):

public class RectangleSizeConverter : IValueConverter
{
    #region IValueConverter Members

    public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return System.Convert.ToDouble(value) * .8;
    }

    public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new System.NotImplementedException();
    }

    #endregion
}

Problem

I want to place a static rectangle on top of an image. The rectangle should be a percentage of the image size (like 80%) regardless of the image size. I have tried to put the image in a Canvas and as a Canvas background but then I can't get the image to fill the surrounding area. ``` <Canvas Grid.Row="1" Grid.Column="0"> <Canvas.Background> <ImageBrush ImageSource="{Binding Path=Image1}"/> </Canvas.Background> </Canvas> ```

Original source