代码之家  ›  专栏  ›  技术社区  ›  adrianm

如何在WPF中在图像上覆盖矩形

  •  2
  • adrianm  · 技术社区  · 15 年前

    我想在图像顶部放置一个静态矩形。

    无论图像大小如何,矩形应为图像大小的百分比(如80%)。

    我曾尝试将图像放在画布中,并作为画布背景,但无法使图像填充周围区域。

    <Canvas Grid.Row="1" Grid.Column="0">
        <Canvas.Background>
            <ImageBrush ImageSource="{Binding Path=Image1}"/>
        </Canvas.Background>
     </Canvas>
    
    2 回复  |  直到 15 年前
        1
  •  4
  •   Carlo    15 年前

    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#(转换器):

    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
    }
    
        2
  •  4
  •   Drew Marsh    15 年前

    <Grid>          
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>
        <Image Source="http://sstatic.net/so/img/logo.png" Stretch="None" />
        <Rectangle>
            <Rectangle.Fill>
                <DrawingBrush Viewbox="0,0,1,1" ViewboxUnits="Absolute">
                    <DrawingBrush.Drawing>
                        <GeometryDrawing Brush="#66FF0000">
                            <GeometryDrawing.Geometry>
                                <RectangleGeometry Rect="0,0,.9,.9" />
                            </GeometryDrawing.Geometry>
                        </GeometryDrawing>
                    </DrawingBrush.Drawing>
                </DrawingBrush>
             </Rectangle.Fill>
         </Rectangle>
    </Grid>