IMul​​tiValueConverter矩形转换器返回错误的大小

问题描述

当我使用以下XAML时:

<Canvas>
<Canvas.Background>
            <DrawingBrush>
                <DrawingBrush.Drawing>
                    <DrawingGroup>
                        
                        <GeometryDrawing>
                            <GeometryDrawing.Geometry>
                                <RectangleGeometry>
                                    <RectangleGeometry.Rect>
                                        <MultiBinding Converter="{StaticResource MyRectConverter}">
                                            <Binding Path="ActualWidth" RelativeSource="{RelativeSource AncestorType={x:Type Canvas}}" />
                                            <Binding Path="ActualHeight" RelativeSource="{RelativeSource AncestorType={x:Type Canvas}}" />
                                            <Binding Source="{StaticResource rectNW}" />
                                        </MultiBinding>
                                    </RectangleGeometry.Rect>
                                </RectangleGeometry>
                            </GeometryDrawing.Geometry>
                            <GeometryDrawing.Pen>
                                <Pen Brush="Yellow" Thickness="2" />
                            </GeometryDrawing.Pen>
                        </GeometryDrawing>
                        
                    </DrawingGroup>
                </DrawingBrush.Drawing>
            </DrawingBrush>
        </Canvas.Background>
</Canvas>

以及以下代码

Public Class MyRectConverter
    Implements IMultiValueConverter

    Public Function convert(ByVal values As Object(),ByVal targettype As Type,ByVal parameter As Object,ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IMultiValueConverter.Convert    
      Dim w As Double = CDbl(values(0))
      Dim h As Double = CDbl(values(1))
      Dim s As String = CStr(values(2))

      Dim regionSize As Size = New Size(w / 3,h / 3)
      Dim ptLocationNW As Point = New Point(0 * w / 3,0 * h / 3)
      Dim rectNW As Rect = New Rect(ptLocationNW,regionSize)

      Return rectNW  
    End Function

    Public Function convertBack(ByVal value As Object,ByVal targettypes As Type(),ByVal culture As System.Globalization.CultureInfo) As Object() Implements System.Windows.Data.IMultiValueConverter.ConvertBack
        Return nothing
    End Function
End Class

我应该在画布的左上角得到一个小矩形。相反,我在整个画布上得到一个矩形。我在做什么错了?

一个奇怪的事情是:如果更改“ New Rect”中的值,似乎只是更改组成矩形的线的宽度,而不是更改矩形的大小...并且矩形仍然只是一个整个画布周围的大矩形。我认为我得到这样的结果:

<RectangleGeometry Rect="0,100,100"/>

但是我真正想要的是这样的结果:

<Rectangle x:Name="rectNW" Canvas.Top="0" Canvas.Left="0" Height="100" Width="100" stroke="Red" strokeThickness="5"/>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)