PDA

View Full Version : listview با قابليتي دلخواه



saed2006
یک شنبه 11 اردیبهشت 1390, 14:05 عصر
سلام
ميخوام توي expersion blend يك listview درست كنم كه هر وقت موس روي هر ايتم از ان رفت چندين كليد كوچك كنار ان ايتم بيايد و با رفتن موس دكمه ها هم نا پديد شوند

مهدی فرزاد
یک شنبه 11 اردیبهشت 1390, 18:18 عصر
سلام
اگر ListView شما آیتمهاش رو از دیتابیس میخونه و Bind هست به روش زیر عمل کنید

روی ListView کلیک راست کنید و گزینه Edit Additional Templates رو انتخاب کرده و گزینه Edit Generated Items رو انتخاب کنید و بعد از تنظیمات محل ذخیره شدن این استایل وارد صفحه ویرایش آیتم ها میشید که باید برای نمایش نام آیتم یک TextBlock رو حتما اضافه کرده و اونو به فیلد مورد نظر در جدول Bind کنید و در کنار اون هر تعداد دکمه که لازم دارید بگذارید اون ها رو Hide کنید و با استفاده از گزینه IsMoseOver در تب Triggers تنظیمات مربوط به آشکار شدن دکمه ها رو در زمان رفتن موس بر روی هر آیتم انجام بدید

saed2006
دوشنبه 12 اردیبهشت 1390, 13:56 عصر
ممنون از لطف شما اقای فرزاد عزیز
خیر لیست ویو به دیتا بیس متصل نیست و قراره تصایر رو داخل خودش نشون بده چجوری hide کنمش؟

مهدی فرزاد
دوشنبه 12 اردیبهشت 1390, 14:23 عصر
سلام
اگر ListView شما دیتا بیس نداره و آیتم هاش ثابت و تعداد مشخص داره میتونید به این شکل عمل کنید
روی ListView کلیک راست کنید و گزینه Add ListViewItam رو به تعداد آیتم هایی که میخواید اضافه بشه بزیند
بعد رو هر آیتم کلیک راست کنید و از گزینه Edit َAdditional Template گزینه Edit Generated Content وبعد Create Empty رو بزنید و هر آنچه میخواهید اضافه کنید

برای Hide کردن هر کنترلی که میخواید ، کنترل مورد نظر رو انتخاب کنید و در تب Properties اون کنترل با استفاده از خاصیت visibility این کار رو انجام بدید

saed2006
دوشنبه 12 اردیبهشت 1390, 18:59 عصر
دیتا بیس نداره اما ایتم های ثابت هم نداره شاید 100000 تا ایتم داشت به ازای همشون این کار رو بکنم؟راه دیگه ای نیست؟

مهدی فرزاد
دوشنبه 12 اردیبهشت 1390, 19:16 عصر
نه اگر آیتمها به این شکل هست راه دوم جواب نمیده
راه ابتکاری زیاد هست
هر آیتم چی رو نشون میده ؟؟
میتونی بجای listview یک یوزرکنترل درست کنی و Runtime به تعداد آیتمهات از اون New بسازی و توی یک panel اضافه کنی

Amir Oveisi
دوشنبه 12 اردیبهشت 1390, 20:15 عصر
کافیه که ItemTemplate مربوط به listview تون رو تغییر بدید. مثلا:

<ListBox >
<ListBox.ItemTemplate>
<DataTemplate>
<Border>
<TextBlock Text="{Binding Name"}/>
</Border>
</DataTemplate>

</ListBox.ItemTemplate>
</ListBox>

در این کد میخوایم که یک listbox داشته باشیم که هر آیتم اون یک textblock داشته باشه و داخل اون textblock، نام یک فرد نشون داده بشه. (بصورت داینامیک)
یک کلاس میسازیم مثلا به اسم Person که یک property داره به اسم Name. حالا یک لیست میسازیم از نوع این Person:
List<Person> p = new List<Person>();
و به تعداد دلخواه داخلش آیتم اضافه می کنیم و Name هر کدوم هم مقدار دهی میشه. مثلا:
Person p1 = new Person(){ Name = "amir" } ;
p.Add(p1);
برای اینکه محتویات این لیست در داخل listbxox نشون داده بشه:
listbox.ItemsSource = p;
با این کار، تمام آیتم های موجود در لیست p در داخل listbox نشون داده میشن به این شکل که پروپرتی Name هر آیتم لیست p در داخل textblock هر آیتم listbox لود میشه (چون bind کردیم).

در حالت کلی روند کار به این شکل هست، حالا شما میتونین بر اساس نیاز خودتون ItemTemplate مورد نظرتون رو طراحی کنید. نکته کلیدی همین Binding ها هستند.

موفق باشید.

پ.ن: برای ListView هم به همین ترتیب میتونین کار کنید.