وبف:كيف يمكن تحديد موضع العناصر أثناء إعادة ترتيبها في عنصر ListBox؟

StackOverflow https://stackoverflow.com/questions/5352379

  •  27-10-2019
  •  | 
  •  

سؤال

لقد اتبعت الحل ل مشكلة إعادة ترتيب العناصر المقدمة من dnr3.يعمل مثل السحر ومن السهل جدًا فهمه.والآن أود أن أذهب خطوة أخرى إلى الأمام:

دعنا نقول ذلك ListBox يحتوي على العناصر A وB وC وD وE.في الحل المذكور، إذا كان أ ListBoxItem يتم نقله إلى أسفل القائمة، ويتم وضعه أسفل العنصر الذي تم تنفيذ الإسقاط عليه.لذا، إذا قمت بتحديد العنصر B وقمت بتحريره فوق العنصر D، فسوف يأخذ مكان D وسيتحرك D مكانًا واحدًا لأسفل.أريد أن أكون قادرًا على إحداث فرق إذا كان العنصر المسحوب أقرب إلى الأعلى أو الأسفل البند المستهدف الحدود - إذا كانت أقرب إلى الجزء العلوي فأريد وضعها فوق العنصر المستهدف، أو أسفله إذا كان خلاف ذلك.أحتاج إلى شيئين لتحقيق ذلك:

  1. أحتاج إلى النقطة المركزية الرأسية للعنصر المستهدف حتى أتمكن من مقارنتها بموضع الماوس.يجب أن يكون من السهل القيام بذلك:

    targetItem.Height / 2;

  2. أحتاج إلى وضع الماوس بالنسبة للعنصر المستهدف. كيف يمكنني الحصول على ذلك؟

في النهاية، أريد مقارنة هاتين القيمتين، وإذا كان موضع الماوس أقل من أو يساوي النقطة المركزية الرأسية للعنصر، فسيتم إسقاط العنصر المسحوب قبل العنصر المستهدف، وإلا أدناه.

شكرًا!

هل كانت مفيدة؟

المحلول

فهمتها!يسترد السطر التالي موضع الماوس بالنسبة للعنصر المستهدف
Point p = e.GetPosition(item);

إليك ما يجب أن يبدو عليه معالج حدث الإسقاط:

private void PlaylistListBoxItem_Drop(object sender, DragEventArgs e)
{
    ...
    ListBoxItem item;
    int centerY;
    Point p;

    item = sender as ListBoxItem;
    centerY = item.Height / 2;
    p = e.GetPosition(item);

    if (p.Y <= centerY)
    ...
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top