View Full Version : محدوده دید
hosein320
جمعه 29 آذر 1392, 17:54 عصر
سلام من یک wrappanel دارم که داخل یک scrollviewer قرار داره و داخل wrappanel چند تا کنترل دارم
وقتی اسکرول رو جا به جا میکنیم چند تا از کنترلا تو محدوده دید نیستن و من میخوام روی اون کنترلا یه کاری انجام بدم
چجوری میتونم اون کنترلا رو بدست بیارم:متفکر:
Boy_nn
شنبه 30 آذر 1392, 08:25 صبح
خوب از اسکرول استفاده نکن
معلومه که وقتی از اسکرول استفاده میکنی یه سری کنترلهات تو دید نیستن
hosein320
شنبه 30 آذر 1392, 13:48 عصر
درست متوجه نشدی دوست عزیز
میخوام اونایی که تو محدوده دید نیستن رو مثلا مخفی کنم
Boy_nn
شنبه 30 آذر 1392, 14:53 عصر
سوالتو درست مطرح نکردی
هنوزم درست متوجه نشدم چی می خوای
ولی اسکرول چه ربطی با مخفی کردن داره
اگه می خوای مخفی کنی خوب مخفی کن چرا از اسکرول کمک میگیری کارش چیز دیگه ای هست
hosein320
دوشنبه 02 دی 1392, 19:39 عصر
عزیز میخوام اسم اون کنترلایی که تو محدوده ی دید نیستن رو بدست بیارم.
امید خطیبی
دوشنبه 02 دی 1392, 20:59 عصر
با سلام خدمت دوست عزیز و گرامی
اگر سوال شما را درست متوجه شده باشم می خواهی از اون کنتل هایی که مخفی هستند استفاده کنی به عنوان یک کنترل کمکی
خوب شما می توانی همون کاری که دوست ما گفتند انجام بدید و مقداری رو که می خواهی از اون کنترل بگیری یا بهش بفرستی را استفاده کن
اگر آن قسمت آخرش رو درست متوجه شده باشم چون اینجوری کنترل رو به شما نمایش نمی دهد ولی هم می توانی ازش استفاده کنی و یا هر کار دیگر و عملیاتی که می خواهی روی آن کنترل انجام دهی
برای نمایش ندادن کنترل و استفاده از آن کنترل ها هم راه های زیادی هست
موفق و پیروز باشید.
hosein320
سه شنبه 03 دی 1392, 12:23 عصر
http://8pic.ir/images/46499026588585350388.jpg
http://8pic.ir/images/26492318955827427687.jpg
الان تو عکس اول کنترل سه و چهار و پنج تو محدوده دید نیستن و تو عکس دوم کنترلای یک و دو
میخوام اونایی که تو محدوده نیستن رو بدست بیارم
Boy_nn
سه شنبه 03 دی 1392, 14:39 عصر
برای چی می خوای به دست بیاری
hosein320
سه شنبه 03 دی 1392, 16:30 عصر
به جای اون دکمه ها یه چیزی شبیه عکس متحرکه قرار میگیره
میخوام وقتی تو محدوده دید نیستن عکسه دیگه تکرار نشه(Pause)
امید خطیبی
سه شنبه 03 دی 1392, 18:00 عصر
خوب شما باید با مختصات آن عکس یا کلید یا هر چیزی رو که داخل صفحه گذاشتی کار کنی
العان شما داری اینا رو می بینی درست خودت هم داری میگی من دارم می بینم
ولی زمانی که اسکرول رو می کشی پایین این یک خصوصیتش تغییر می کنه و یک موضوع دیگه آن کلید هایی هم که پایین گذاشتی یک مختصاتی داره و برای این کار می تونی حتی مختصات دور اون کنترل رو هم بسنجی
یا با margin کار کن یا با alignment
موفق باشید.
Amir Oveisi
جمعه 06 دی 1392, 01:30 صبح
نمونه کد:
private bool IsElementVisible(FrameworkElement element, FrameworkElement container)
{
if (!element.IsVisible)
return false;
Rect bounds = element.TransformToAncestor(container).TransformBo unds(new Rect(0.0, 0.0, element.ActualWidth, element.ActualHeight));
Rect rect = new Rect(0.0, 0.0, container.ActualWidth, container.ActualHeight);
return rect.Contains(bounds.TopLeft) || rect.Contains(bounds.BottomRight);
}
و نحوه استفاده از این متد:
private void Scroll_Changed(object sender, ScrollChangedEventArgs e)
{
Object o = sender;
bool elementIsVisible = false;
foreach (FrameworkElement child in this.stackPanel1.Children)
{
if (child != null)
{
elementIsVisible = this.IsElementVisible(child, this.scroller);
if (elementIsVisible)
{
// Your logic
}
}
}
}
منطق کار به این شکل هست که شما مستطیلی که کنترل مورد نظرتون در اون قرار داده شده و همچنین مستطیلی که ScrollViewer داره نمایش میده رو بدست میارید، حالا اگر این دو مستطیل نقطه اشتراک داشته باشند، یعنی کنترل مورد نظر در حال حاضر در محدوده دید قرار داره و در غیر اینصورت از محدوده دید خارج شده.
منبع:
http://stackoverflow.com/questions/19397780/scrollviewer-indication-of-child-element-scrolled-into-view
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.