在WPF中将图像缩放到画布父级高度

时间:2016-11-05 20:44:45

标签: c# .net wpf canvas

我是WPF新手,尝试过简单的事情。我正在使用画布制作自定义控件,其中我的图像高于画布。当它显示它溢出画布时,所以我希望它缩放到父高度。这可能是一个简单的答案,但我还没有找到它。

这是XAML:

<UserControl x:Class="WPFUserControl.Instance"
             Name="InstanceBox"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             Width="448" Height="99.2">
    <Grid Name="InstanceGrid" Background="White" x:FieldModifier="public" Margin="0,0,0,0.2">
        <Canvas>
            <Image 
                HorizontalAlignment="Left"  
                Source="pack://siteoforigin:,,,/Resources/M-Series-single.jpg" />
        </Canvas>
    </Grid>
</UserControl>

3 个答案:

答案 0 :(得分:1)

如果你摆脱了画布(因为它没有测量它的子画面)而是使用Stretch的{​​{1}}属性,你应该能够获得所需的行为。如果没有,您可以尝试使用Image

答案 1 :(得分:0)

1)不要使用画布。

2)您可以绑定到网格的ActualHeight属性。

<Grid Name="InstanceGrid" Background="White" x:FieldModifier="public" Margin="0,0,0,0.2">
     <Image Heigh="{Binding ElementName=InstanceGrid, Path=ActualHeight}"
            HorizontalAlignment="Left"  
            Source="pack://siteoforigin:,,,/Resources/M-Series-single.jpg" />
</Grid>

答案 2 :(得分:0)

画布不会调整子元素的大小,因此,如果可以的话,应将Image放在Grid中。如果必须使用画布,则可以将图像的宽度和高度绑定到画布的ActualWidth和ActualHeight。

<Canvas x:Name="canvas">
    <Image x:Name="image" Width="{Binding ActualWidth, ElementName=canvas, Mode=OneWay}" Height="{Binding ActualHeight, ElementName=canvas, Mode=OneWay}" Stretch="Fill" />
</Canvas>