過去に、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% を占めるようにする必要があります。マージンなし。これを取得すると、マウスの移動/開始/終了イベントは画像の境界線のみに設定されます。
問題は、キャンバスの高さのバインドされた値です。これにより、機能するキャンバスの幅と同じように定義されているにもかかわらず、画像が表示されず、コンバーターは正しい値を返します。Height="240" のように、高さをバインドされた値ではなく正確な値に設定すると、機能します。
ありがとう!