ورود

View Full Version : تغيير ايتمي در فايل ريسورس



saed2006
شنبه 25 تیر 1390, 14:16 عصر
چندين رنگ داخل يك فايل resourcedictionry تعريف كردم و يك رنگ هم هست داخل اون به نام رنگ فعال كه تمام كنترل ها رنگشون رو از اين رنگ ميگيرند چجوري ميتونم رنگ فعال در فايل resourcedictionry رو در زمان اجرا تغيير بدم تا رنگ تمام كنترل ها كه به اون بايند شده تغيير كنند خلاصه اينكه ميخوام مثل ياهو مسنجر تم بسازم برا نرم افزارم

مهدی فرزاد
یک شنبه 26 تیر 1390, 01:15 صبح
سلام

شما باید ابتدا یک کلاس که INotifyPropertyChanging پیاده سازی کنه بسازید که در خودش یک Property از نوع Brush رو نگهداری کنه
مثل کد زیر
public partial class ColorClass : INotifyPropertyChanging, INotifyPropertyChanged
{

private Brush _myBrush;
private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
partial void OnMyBrushChanging(Brush value);
partial void OnMyBrushChanged();
public Brush myBrush
{
get { return _myBrush; }
set
{
if ((this._myBrush != value))
{
this.OnMyBrushChanging(value);
this.SendPropertyChanging();
this._myBrush = value;
this.SendPropertyChanged("myBrush");
this.OnMyBrushChanged();
}
}
}
public event PropertyChangingEventHandler PropertyChanging;

public event PropertyChangedEventHandler PropertyChanged;

protected virtual void SendPropertyChanging()
{
if ((this.PropertyChanging != null))
{
this.PropertyChanging(this, emptyChangingEventArgs);
}
}

protected virtual void SendPropertyChanged(String propertyName)
{
if ((this.PropertyChanged != null))
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}

}

حالا رنگهایی رو که میخوای در یک ریسورس دیکشنری نگهداری میکنی مثلا Brush1 و Brush2
من در استایل دکمه مورد نظرم بجای اینکه این رنگ ها رو به بکگراندش بدم میام و رنگ اون رو با کد زیر Bind میکنم به خاصیتی که توی اون کلاس نوشتم
مثلا این یک تکه کد در استایل دکمه که قرار بکگراند رو نمایش بده
<Border BorderBrush="Black" BorderThickness="1" Background="{Binding myBrush}"/>

حالا دوتا Rectangle میگذارم رو فرمم که با کلیک روی یکی رنگ Brush1 ست بشه و با دیگری رنگ Brush2
پس این کد رو در فرمم مینویسم
ColorClass cc;
public MainWindow()
{
InitializeComponent();
cc = new ColorClass();
this.button.DataContext = cc;
}

private void Rectangle_MouseDown(object sender, MouseButtonEventArgs e)
{
cc.myBrush = FindResource("Brush1") as Brush;
}

private void Rectangle_MouseDown_1(object sender, MouseButtonEventArgs e)
{
cc.myBrush = FindResource("Brush2") as Brush;
}

فایل ضمیمه رو مشاهده کنید