过去我创建了一个继承imagebox控件的winform用户控件,用户可以通过用鼠标绘制一个矩形来选择图像的一部分。现在我想对 WPF 做同样的事情。我写了这个 XAML 代码:
<StackPanel Width="321" Height="241">
<Canvas x:Name="SampleImageCanvas"
MouseMove="SampleImageCanvas_MouseMove"
MouseDown="SampleImageCanvas_MouseDown"
MaxHeight="240" MaxWidth="320" >
<Canvas.Width>
<MultiBinding Converter="{StaticResource SizeConverter}" Mode="OneWay">
<Binding XPath="./Size/Width" />
<Binding XPath="./Size/Ratio" />
</MultiBinding>
</Canvas.Width>
<Canvas.Height>
<MultiBinding Converter="{StaticResource SizeConverter}" Mode="OneWay">
<Binding XPath="./Size/Height" />
<Binding XPath="./Size/Ratio" />
</MultiBinding>
</Canvas.Height>
<Canvas.Background>
<ImageBrush x:Name="SampleImage" ImageSource="{Binding XPath=./SampleImage}" Stretch="Uniform"/>
</Canvas.Background>
<Rectangle x:Name="ROI"
Canvas.Top="{Binding XPath=./ROI/Top, Mode=TwoWay}"
Width="{Binding XPath=./ROI/Width, Mode=TwoWay}"
Height="{Binding XPath=./ROI/Height, Mode=TwoWay}"
Canvas.Left="{Binding XPath=./ROI/Left, Mode=TwoWay}"
Stroke="#FFD13750"
/>
</Canvas>
</StackPanel>
数据存储在 xml 文档中。图像比画布大,所以它必须均匀拉伸,以适应画布的最大尺寸,我希望画布调整为图像缩放显示的大小,所以图像填充了 100% 的画布没有边距。当我有这个时,鼠标移动/进入/退出事件将仅设置为图像边框。
问题是画布高度绑定值,这会导致图像不显示,尽管它的 beec 定义与画布宽度相同,并且转换器返回正确值。当我将高度设置为精确值而不是绑定值时,例如 Height="240",它可以工作。
谢谢!