جستجو در تالار

در حال نمایش نتایج برای برچسب های 'GridView'.



تنظیمات بیشتر جستجو

  • جستجو بر اساس برچسب

    برچسب ها را با , از یکدیگر جدا نمایید.
  • جستجو بر اساس نویسنده

نوع محتوا


تالار ها

  • عمومی
    • اطلاعیه
    • اخبار
    • پیشنهادها و انتقادات
    • درخواست آموزش
    • مشکلات و مسائل انجمن
    • متفرقه
  • سوالات، مشکلات و درخواست
    • ویندوز استور
    • وب (ASP.Net)
    • ویندوز دسکتاپ (Win32 & WPF)
    • زامارین فرم (Xamarin.Forms)
    • زامارین اندروید
    • زامارین iOS
    • دات نت کور
    • اینترنت اشیاء (IOT)
    • سوالات کلی و عمومی
  • توسعه نرم افزارهای ویندوز استور
    • سوالات، مشکلات پروژه های ویندوز استور
    • مقالات، کتاب ها و منابع آموزشی
    • سورس کدهای آموزشی
  • برنامه نویسی زامارین
    • زامارین فرم (Xamarin.Forms)
    • زامارین ios
    • زامارین اندروید
    • عمومی
  • دات نت کور
  • متفرقه
    • آموزش ابزارها و نرم افزار ها
    • آموزش های سرویس ها و سایت ها
    • سوالات و مشکلات برنامه نویسی Win 32
  • نرم افزار
    • نرم افزار های تیم انجمن
    • نرم افزار های ساخت شما
    • سفارش نرم افزار و برنامه نویسی
    • معرفی ابزارها و نرم افزارهای مرتبط
    • درخواست ابزار کمکی
    • مشکلات و سوالات در مورد نرم افزار ها

گروه


آدرس تارنما


یاهو


اسکایپ


حساب مایکروسافت


شماره تماس


تلگرام


مکان


علایق


نام توسعه دهندگی

3 نتیجه پیدا شد

  1. سلام؛ اگر شما هم با پنل GridView کار کرده باشید، حتما در نمایش آیتم ها در صفحات مختلف دچار مشکل فضای خالی در طرفین آیتم ها شدید. متاسفانه این کنترل به خوبی بهینه نشده و کاملا رسپانسیو عمل نمی کند. بنابراین باید از راه حلی دیگر این مشکل رو جبران کنیم تا آیتم ها تمام عرض پنل رو بپوشانند و فضای خالی آزار دهنده ای جلوی چشم مخاطب قرار نگیرد. اما حالا بریم سراغ توضیحات: ابتدا در xml کنترل گرید ویو، کدهای زیر رو اضافه می کنیم، تا عرض هر آیتم به اندازه فضای آزاد برسه: GridView.ItemContainerStyle> <Style TargetType="GridViewItem"> <Setter Property="HorizontalContentAlignment" Value="Stretch" /> <Setter Property="VerticalContentAlignment" Value="Stretch" /> </Style> </GridView.ItemContainerStyle> به این منظور باید در رویداد SizeChanged گرید ویو میزان عرض هر آیتم رو بصورت دستی تغییر بدیم. من برای این کار تعداد ستون هایی رو که می خوام در عرض صفحه میشه نمایش داد رو محاسبه می کنم و سپس این عرض "حداکثری" رو به آیتم ها می دم. من عرض حداکثری هر آیتم رو 850 انتخاب کردم: private void gvFave_SizeChanged(object sender, SizeChangedEventArgs e) { var columns = Math.Ceiling(ActualWidth / 850); ((ItemsWrapGrid)gvFave.ItemsPanelRoot).ItemWidth = e.NewSize.Width / columns; } به همین سادگی می تونید از شر فضای خالی راحت بشید. اگر سوالی بود در خدمتم. با تشکر
  2. با سلام، من یک استایل تعریف میکنم به اینطورت: <Style TargetType="Image"> <Setter Property="Width"> <Setter.Value> <x:Double x:Name="widthvalue"></x:Double> </Setter.Value> </Setter> </Style> میخواهم که با تغییر سایز صفحه، اندازه دابل widthvalue هم تغییر کنه، ولی از کدبیهایند نمیتونم بهش دسترسی پیدا کنم.
  3. سلام دوستان، امیدوارم خوب و سرحال باشید به توصیه یکی از دوستان امروز تصمیم گرفتم که آموزشی برای پیاده سازی Data virtualization بذارم. امیدوارم که این آموزش به دردتون بخوره تو برنامه هاتون ازش استفاده کنید. خیلی وقت ها تو برنامه لازم داریم که با دیتا زیادی سرو کار داشته باشیم اینقدر زیاد که نباید توی مموری رم ذخیره بشن. مثل زمانی که مجموعه (Collection) از عکس ها داشته باشیم که شامل ده هزار تا عکس باشه و خب واقعا هم منطقی نیست که همه عکس ها رو توی مموری نگه داریم. و فقط باید دیتایی که روی صفحه کامپیوتر یا موبایل نمایش داده میشن رو توی مموری مون نگه داریم. یکی از راهکار های خوب برای این مسئله اینه که ما Incremental data virtualizition استفاده کنیم. برای مثال یک GridView و یا ListView داریم که از این راهکار استفاده می کنه و شامل 10,000 ایتم هست و فقط در ابتدای کار 20 ایتم ابتدایی رو بازیابی می کنه نمایش میده و همینطور که به انتهای ایتم ها نزدیک میشیم داده بیشتری رو درخواست و بازیابی می کنه، دقیقا در خود windows store app و یا Twitter می تونیم ببنیم زمانی که به انتهای لیستی نزدیک میشیم دیتای بیشتری از طرف سرور ها گرفته میشه و برای نمایش در اپ اماده نشون داده میشه. راهکارهای دیگه ایی هم وجود دارن مثل Random access data virtualization هم وجود دارد که توی این آموزش با اون کاری نداریم برای پیاده سازی Incremental data virtualizition لازمه که Data source خودمون رو که با استفاده از interface های زیر پیاده سازی کنیم: IList (INotitifyCollectionChanged(C#/Vb یا (IObservavleVector<T>(c++/CX ISupportIncrementalLoading حالا برای ساده تر شدن کار به جای دو مورد اول از <ObservalbeCollection<T استفاده می کنیم که هر دو interface بالا رو پیاده سازی کرده در خودش و دیگه لازم نیست کار زیادی انجام بدیم و خب مسلما زیاده کاری هم خوب نیست و خب interface سوم هم یک تابع و یک property تعریف می کنه که برای بازیابی دیتای بیشتری استفاده میشه به اینصورت که هر زمان به انتهای GridView و یا ListView می رسیم به صورت خودکار تابع LoadMoreItemsAsync رو از صدا می زنن. HasMoreItems : برای فهمیدن اینکه آیا Collection ایتم های دیگه ایی برای بازیابی دارد یا نه LoadMoreItemsAsync : زمانی که باید دیتای بیشتری فراخوانی شود توسط کنترلری که Collection رو bind می کنه یه نکته آخر قبل از اینکه یه​کد نمونه بخوام بذارم هم اینه که GridView و یا ListView خودشون Data Virtualization رو به صورت پیشفرض هندل می کنن و باید مواظب باشید که توی xaml جوری کد نزنید که باعث بشید Virtualization از کار بیافته. یکی از اشتباهاتی که خیلی دیدم انجام می دن اینه که GridView و یا ListView ها رو داخل ScrollViewer می ذارن که با توجه به خصوصیات رفتاری این کنترلر باعث میشه که Virtualazition کلا ازنابود بشه و انجام نشه پس اگر واقعا نیاز بود که داخل این کنترلر بذارید حتما Height و Width ثابتی براش تعیین کنید. این یه نمونه کد که امیدوارم بتونه کمکی برای پیاده سازی Incremental Data Virtualiztion به شما بکنه و از لحاظ کیفی برنامه تون رو بهتر بکنه امیدوارم نمونه کد زیر به اندازه کافی واضح باشه و اگه جایی از این کد احساس می کنید نیاز به توضیح بیشتر داره حتما بگید تا توضیحات بیشتری براش بذارم کلاس زیر رو برای دیتا ها می سازید و فقط کافیه که توی کد پشت برنامه جایی که GridView و یا ListView رو تعریف کردید ItemsSource شون رو به شی ایی از این کلاس مقدار دهی کنید و از برنامه تون لذت ببرید public class MyC: ObservableCollection<Product>, ISupportIncrementalLoading { private bool _hasMoreItems= true; public bool HasMoreItems { get { return _hasMoreItems; } } public IAsyncOperation<LoadMoreItemsResult> LoadMoreItemsAsync(uint count) { // رو که توی صفحهprogressbar // قرار داره رو میگیریم MainPage ProgressBar progressBar = ((Window.Current.Content as Frame).Content as MainPage).PageProgressBar; // برای انجام کارهایی که در thread های متفاوت هستند لازم که به dispatcher دسترسی داشته باشیم CoreDispatcher coreDispatcher = Window.Current.Dispatcher; return Task.Run<LoadMoreItemsResult>(async () => { // می تونیم در این قسمت progressbar رو فعال کنیم با توجه به اینکه در یه thread دیگه پردازش میشه await coreDispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { progressBar.Visibility = Visibility.Visible; }); // دیتای مورد نیازمون رو فراخوانی می کنیم var contentDataItems = await ContentDataSource.GetIncrementalListing(this.Count().ToString(), count.ToString()); if (contentDataItems.Count == 0) { // اگه دیتا به آخر رسیده بود و چیزی برای نمایش نداشتیم باید // HasMoreItems // مقدار // false // رو برگردونه تا دیگه تابع // LoadMoreItems // صدا زده نشه this._hasMoreItems = false; } await coreDispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { foreach (Product item in contentDataItems) { this.Add(item); } progressBar.Visibility = Visibility.Collapsed; }); return new LoadMoreItemsResult() { Count = (uint)contentDataItems.Count}; }).AsAsyncOperation<LoadMoreItemsResult>(); } } برای اطلاعات بیشتر هم میتونید آدرس زیر رو بخونید : ListView and GridView data virtualization