PDA

View Full Version : مبتدی: اعمال Style بر روی تمام Button های یک عنصر



Chabok
چهارشنبه 15 دی 1389, 14:02 عصر
با سلام
من تازه کار با WPF را شروع کردم :لبخند:

سوالی که دارم اینه که یک سری Button داریم در یک Grid که الان یک Style تعریف کرده ام و به هر Button به صورت مجزا نسبت داده ام . به این صورت :

<Button Width="50" Style="{StaticResource FretWHTbutton}"/>و Style بصورت زیر است :

<Style x:Key="FretWHTbutton" TargetType="Button">ولی چون تعداد Button هام زیاد شده فکر میکنم این کار افزونگی داره

چطور باید این Style رو به تمام Button های این Grid نسبت بدهم بدون اینکه واسه تک تکشون این {StaticResource FretWHTbutton} رو بنویسم ؟

یعنی من فقط در Grid داشته باشم :

<Button Width="50" />
<Button Width="50" />
<Button Width="50" />
<Button Width="50" />و همه این button ها style مورد نظر را داشته باشند

با تشکر

PetekDincos
چهارشنبه 15 دی 1389, 14:27 عصر
با سلام
برای دادن Style برای یک کنترل یا در هنگام تعریف خود کنترل Style اش را همراهش تعریف می کنیم یا در قسمت Resource خود Window یک Style تعریف کرده و به صورت StaticResource به کنترل می دیم یا در یک فایل ResourceDictionary یک Style تعریف کرده و به صورت DynamicResource به کنترل می دیم اما این موردی که شما گفتید فکر نکنم بشه

مهدی فرزاد
چهارشنبه 15 دی 1389, 14:42 عصر
سلام
در تعریف استایل مشخص کنید که این استایل مربوط به دیفالت تمام Button های برنامه میشه و زمانی که شما یک Button رو به برنامه اضافه کنید به شکل خود کار این استایل برای آن اعمال خواهد شد

و برای این که این استایل دیفالت تمام Button ها بشه در تعریف اون اصلا برایش نام یا key تعریف نکنید

<Style TargetType="{x:Type Button}">



من پیشنهاد میکنم استایلتون رو در قالب یک ریسورس دیکشنری ذخیره کنید تا در تمام برنامه در دسترس باشه و به راحتی به برنامه های دیگه هم انتقال پیدا کنه

اگه تازه شروع کردید به آموزش های من یک نگاهی بندازید

Chabok
چهارشنبه 15 دی 1389, 15:23 عصر
مرسی از جوابها

ولی من نمیخوام استایل Button ها در کل محیط تغییر کنه
فقط در همان Grid خاص میخواهم این اتفاق بیفته

آیا واسه این راهی هست ؟

ممنونم

مهدی فرزاد
چهارشنبه 15 دی 1389, 15:45 عصر
من که تا حالا این کار رو نکردم و فکر نکنم راهی باشه ( تا اونجا که میدونم)
بهتره برای افزایش سرعت عمل یک Butoon رو که استایل دادید برا یسایر باتون ها از همون باتون کپی بگیرید
البته در کد C# میشه این کار رو کرد به شکل زیر

شما برای اون گرید یک اسم میگذارید مثلا x:Name ="grid
و برای استایلتون هم یک Key تعریف میکنید مثلا

<Style x:Key="buttonstyle1" TargetType="{x:Type Button}">

حالا توی لود ویندوزتون بنویسید


System.Windows.Style myStyle = (System.Windows.Style)(FindResource("buttonstyle1"));
foreach (UIElement item in this.grid.Children)
{
if (item is Button)
{
((Button)item).Style = myStyle;
}
}


فایل ضمیمه رو ببینید

و هر باتومی رو که دوست داشتید تو یگرید سمت چپ بگذارید و برنامه رو مجدد اجرا کنید و نتیجه رو ببینید

mohsen.net
سه شنبه 28 دی 1389, 12:33 عصر
style را برای همان grid تعریف کنید .
<
StackPanel.Resources>
<Style x:Key="StyleForButton" TargetType="Button">
<Setter Property="Button.Content" Value="From Inside my Stackpanel tag" />
<Setter Property="Button.Background" Value="Gray" />
</Style>
</StackPanel.Resources>

مهدی فرزاد
سه شنبه 28 دی 1389, 15:02 عصر
style را برای همان grid تعریف کنید .
<
StackPanel.Resources>
<Style x:Key="StyleForButton" TargetType="Button">
<Setter Property="Button.Content" Value="From Inside my Stackpanel tag" />
<Setter Property="Button.Background" Value="Gray" />
</Style>
</StackPanel.Resources>

سلام
روش شما درسته اما نه به این شکل که گفتید و نیاز به کمی اصلاح داره
دقت کنید در روش شما فقط محل قرار گرفتن استایل عوض شده و این دلیل نمیشه هر کنترلی که توی اون محل قرار میگیره از اون استایل استفاده کنه و بازم باید برای اون کنترل استایل رو معرفی کرد چون استایل Key داره و دیفالت نیست
پس برای این Key رو پاک کنید اونوقت روش شما صحیح میشه


StackPanel.Resources>
<Style TargetType="Button">
<Setter Property="Button.Content" Value="From Inside my Stackpanel tag" />
<Setter Property="Button.Background" Value="Gray" />
</Style>
</StackPanel.Resources>