PDA

View Full Version : override كردن خاصيت text براي textbox



niloo17
چهارشنبه 06 مهر 1390, 08:53 صبح
سلام دوستان
چه جوري مي تونم خاصيت text را overrideكنم
ممنون از راهنماييتون

mehran_sh_t
چهارشنبه 06 مهر 1390, 09:15 صبح
سلام
اول یک کلاس ایجاد کنید که از textbox مشتق شده باشه، بعد توش public override رو که بنویسید، لیست ویژگی ها رو میاره. text رو از تو لیست انتخاب کنید و ...

موفق باشید

niloo17
چهارشنبه 06 مهر 1390, 09:30 صبح
ممنون از راهنماييتون ولي نمي شه از اين روش در wpf استفاده كرد


public override string Text
{
get { return (string)this.Text.Replace(",", ""); }
set { Text = value; }
}


خطاي
cannot override inherited member

niloo17
پنج شنبه 07 مهر 1390, 08:12 صبح
يعني هيچ كس بلد نيست !!:متفکر:

رضا عربلو
پنج شنبه 07 مهر 1390, 13:10 عصر
پراپرتي text يک dependency property است و چون يک metadata دارد به اين روش نمي توان انرا override کرد
روش يک override کردن Metadata يک dependency property
http://msdn.microsoft.com/en-us/library/ms754209.aspx

روش 2 به جاي overide کردن يک پراپرتي جديد به همان نام ايجاد کنيد

public new string Text
{
get { return (string)this.Text.Replace(",", ""); }
set { Text = value; }
}

niloo17
شنبه 09 مهر 1390, 08:45 صبح
ممنون از راهنماييتون
از روش new كردن كه نميشه استفاده كرد خطاي 'System.StackOverflowException' را ميده
از اين كد هم استفاده كردم


static UCTextBox()
{
TextBox.TextProperty.OverrideMetadata(typeof(UCTex tBox),
new FrameworkPropertyMetadata(string.Empty,
FrameworkPropertyMetadataOptions.BindsTwoWayByDefa ult |
FrameworkPropertyMetadataOptions.Journal,
null, /* property changed callback */
new CoerceValueCallback(CoerceText),
true, /* is animation prohibited */
UpdateSourceTrigger.LostFocus));
}

private static object CoerceText(DependencyObject d, object value)
{
return value.ToString().Replace(",","");
}

اين كد هم زمان get و هم زمان set خاصيت فراخواني مي شه . در حالي كه من مي خوام فقط متد get را override كنم!!!:ناراحت: