فرض کنید پروژهی WPF شما از چندین پروژهی Class library و اسمبلیهای جانبی دیگر، تشکیل شدهاست. اکنون نیاز است جهت سهولت توزیع آن، تمام این فایلها را با هم یکی کرده و تبدیل به یک فایل EXE نهایی کنیم. مایکروسافت ابزاری را به نام ILMerge ، برای یک چنین کارهایی تدارک دیدهاست؛ اما این برنامه با WPF سازگار نیست. در ادامه قصد داریم اسمبلیهای جانبی را تبدیل به منابع مدفون شده در فایل EXE برنامه کرده و سپس آنها را در اولین بار اجرای برنامه، ...
فرض کنید قصد دارید برای انتخاب بین چند گزینهی محدود، از RadioButtonها بجای سایر کنترلهای موجود استفاده کنید. این گزینهها نیز توسط یک Enum تعریف شدهاند. اکنون نیاز است گزینههای مختلف این Enum را به RadioButtonهای تعریف شده Bind کنیم.
تعریف Enum برنامه به صورت زیر است: namespace WpfBindRadioButtonToEnum.Models
{
public enum Gender
{
Female,
Male
}
}
در ادامه با توجه به اینکه Ra ...
اگر با دیتا گریدهای WPF کار کرده باشید، به این مساله برخورد کرده اید که وقتی روی یک سلول از دیتا گرید Validaion اعمال شده باشد و آن سلول مقدار نامعتبر داشته باشد،امکان ویرایش سایر ردیفها و سلولها وجود ندارد.در بعضی مواقع نیاز است که این رفتار دیتا گرید غیر فعال شود.یکی از راه هایی که میتوان این کار را انجام داد Override کردن متد OnCanExecuteBeginEdit مربوط به دیتا گرید و تغییر مقدار CanExecute در صورت Invalid بودن سلولها است. ...
در مطلب «بهبود کارآیی کنترلهای لیستی WPF در حین بارگذاری تعداد زیادی از رکوردها» عنوان شد که در حالت فعال بودن UI Virtualization، فقط به تعداد ردیفهای نمایان، اشیاء متناظری به یک کنترل لیستی اضافه میشوند و حالت برعکس آن زمانی است که ابتدا کلیه اشیاء بصری یک لیست تولید شده و سپس لیست نهایی نمایش داده میشود.
سؤال: چگونه میتوان تعداد اشیاء اضافه شده به Visual tree یک کنترل لیستی را شمارش کرد؟
شبیه به افزونه FireBug فایرفاکس، ...
کنترلهای WPF در حالت پیش فرض و بدون اعمال قالب خاصی به آنها عموما خوب عمل میکنند. مشکل از جایی شروع میشود که قصد داشته باشیم حالت پیش فرض را اندکی تغییر دهیم و یا Visual tree این کنترلها اندکی پیچیده شوند. برای نمونه مدل زیر را در نظر بگیرید:using System;
namespace WpfLargeLists.Models
{
public class User
{
public int Id { set; get; }
public string FirstName { set; get; }
public string ...
در WPF، زیر ساختهای ComponentModel توسط کلاسی به نام PropertyDescriptor، منابع Binding موجود در قسمتهای مختلف برنامه را در جدولی عمومی ذخیره و نگهداری میکند. هدف از آن، مطلع بودن از مواردی است که نیاز دارند توسط مکانیزمهایی مانند INotifyPropertyChanged و DependencyProperty ها، اطلاعات اشیاء متصل را به روز کنند.
در این سیستم، کلیه اتصالاتی که Mode آنها به OneTime تنظیم نشده است، به صورت اجباری دارای یک valueChangedHandl ...
MarkupExtension ها قبلا در اینجا توضیح داده شده اند. یکی از MarkupExtensionهای از پیش تعریف شده x:Static است که برای مقداردهی یک خصوصیت در XAML با یک مقدار استاتیک استفاده میشود.اگر بخواهید از یک ثابت(constant)،یک خصوصیت استاتیک(static property)، یا یک مقدار از یک enumeration، برای مقداردهی یک خصوصیت در XAML استفاده کنید باید از این MarkupExtension استفاده کنید.
برای مثال برای یک استفاده از یک خصوصیت استایک به صورت زیر عمل ...
شاید تا به حال در یک برنامه سازمانی نیاز به Bind کردن یک Enum به کنترلهای XAML به چشمتان خورده باشد ، روشی که من برای این کار استفاده میکنم توسط یک Markup Extension به صورت زیر است :public class ByteEnumerationExtention : MarkupExtension
{
public ByteEnumerationExtention(Type enumType)
{
this.enumType = enumType;
}
private Type enumType;
public Type EnumType
...
اغلب در حین Bind کردن Propertyها در XAML به مشکل Bind نشدن بر میخوریم. من معمولا از روش زیر استفاده میکنم: public class DatabindingDebugConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Debugger.Break();
return value;
}
pu ...
Markup Extensionها برای مواردی استفاده میشوند که قرار است مقداری غیر از یک مقدار ثابت و یک نوع قابل شناسایی در XAML برای یک value تنظیم شود. تمام مواردی در XAML که درون {} قرا میگیرند همان Markup Extensionها هستند. مانند Binding و یا StaticResoiurces.
علاوه بر Markup Extensionهای از پیش تعریف شده در XAML، میتوان Markup Extensionهای شخصی را نیز تولید کرد. در واقع به زبان سادهتر Markup Extension برای تولید سادهی دادههای پیچیده در ...