में MVVM का उपयोग कर नीचे मेरी XAML है घसीटा। मेरे पास कैनवास के अंदर एक छवि है। जब मैं छवि पर माउस खींचा जाता हूं तो मैं छवि पर आयत खींचना चाहता हूं। मैंने इसे सफलतापूर्वक WPF में किया। लेकिन अब मैं इसे एमवीवीएम में करना चाहता हूं। ईवेंट हैंडलर को कोड में रखने के बजाय मैं उन्हें अपने व्यूमोडेल में रखना चाहता हूं। मैं एमवीवीएम को लागू करने के लिए एमवीवीएम फाउंडेशन का उपयोग कर रहा हूं। नीचे एमवीवीएम फाउंडेशन का एक लिंक है। http://mvvmfoundation.codeplex.com/आयत बनाएं जब माउस WPF
किसी भी मदद अत्यधिक सराहना की है।
XAML
<Canvas Name="cnvImage">
<Image Height="348" HorizontalAlignment="Left" Margin="12,39,0,0" Name="imgPreview"
Stretch="Fill" VerticalAlignment="Top" Width="443"
Source="/Images/CapturedImage.png"
MouseDown="imgCamera_MouseDown" MouseMove="imgCamera_MouseMove" MouseUp="imgCamera_MouseUp" />
</Canvas>
कोड के पीछे
// This is the rectangle to be shown when mouse is dragged on camera image.
private Point startPoint;
private Rectangle rectSelectArea;
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void imgCamera_MouseDown(object sender, MouseButtonEventArgs e)
{
startPoint = e.GetPosition(cnvImage);
// Remove the drawn rectanglke if any.
// At a time only one rectangle should be there
if (rectSelectArea != null)
cnvImage.Children.Remove(rectSelectArea);
// Initialize the rectangle.
// Set border color and width
rectSelectArea = new Rectangle
{
Stroke = Brushes.LightBlue,
StrokeThickness = 2
};
Canvas.SetLeft(rectSelectArea, startPoint.X);
Canvas.SetTop(rectSelectArea, startPoint.X);
cnvImage.Children.Add(rectSelectArea);
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void imgCamera_MouseMove(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Released || rectSelectArea == null)
return;
var pos = e.GetPosition(cnvImage);
// Set the position of rectangle
var x = Math.Min(pos.X, startPoint.X);
var y = Math.Min(pos.Y, startPoint.Y);
// Set the dimenssion of the rectangle
var w = Math.Max(pos.X, startPoint.X) - x;
var h = Math.Max(pos.Y, startPoint.Y) - y;
rectSelectArea.Width = w;
rectSelectArea.Height = h;
Canvas.SetLeft(rectSelectArea, x);
Canvas.SetTop(rectSelectArea, y);
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void imgCamera_MouseUp(object sender, MouseButtonEventArgs e)
{
rectSelectArea = null;
}
कोड में लिखा मैं पता है कि मैं अपने viewmodel में लिख सकते हैं और उसके अनुसार क्या परिवर्तन XAML में आवश्यक हैं की जरूरत है की जरूरत है।
अग्रिम धन्यवाद।
भूल MVVM का मतलब परतों की जुदाई न करें। एक आयताकार खींचने की क्षमता मेरे लिए सुंदर यूआई-विशिष्ट लगता है, इसलिए मुझे कोड-बैक में इसे खींचने और फिर माउस परत के दौरान डेटा परत ('ViewModel') में पूरा आयत पार करने में कोई समस्या नहीं होगी। प्रकाशित हो चूका। – Rachel