View Full Version : تغییر رنگ سطر ها با Resource ها در wpf
خسرو خان
چهارشنبه 12 مهر 1391, 10:27 صبح
با سلام
من یه list view دارم که یه ستون به نام severity داره که این ستون 4 نوع پیغام رو نشون میده . حالا میخوام برحسب نوع پیغام رنگ سطر عوض بشه . یعنی اگر severity برابر 1 بود رنگ سطر بشه آبی و ....
چطور میتونم این کار رو انجام بدم ؟
با تشکر
mze666
چهارشنبه 12 مهر 1391, 16:55 عصر
با ListView امتحان نکردم ولی این روش با DataGrid کار میکنه:
یک کلاس درست میکنید مثلاً به اسم SeverityStyleSelector که از StyleSelector مشتق میشه و شما باید متد SelectStyle اش رو Override کنید. به صورت زیر:
public class SeverityStyleSelector : StyleSelector
{
public override Style SelectStyle(object item, DependencyObject container)
{
if (item is YourEntity)
{
YourEntity entity = item as YourEntity;
if (entity.SeverityId == 1)
{
return BlueStyle;
}
else if (entity.SeverityId == 2)
{
return RedStyle;
}
}
return null;
}
public Style BlueStyle { get; set; }
public Style RedStyle { get; set; }
}
بعد از این کار، داخل پنجره مورد نظرتون به صورت زیر عمل میکنید:
<Window.Resources>
<UI:SeverityStyleSelector x:Key="selector">
<UI:SeverityStyleSelector.BlueStyle>
<Style TargetType="DataGridRow">
<Setter Property="Background" Value="Blue" />
</Style>
</UI:SeverityStyleSelector.BlueStyle>
</UI:SeverityStyleSelector >
</Window.Resources>
بعد از این مرحله هم این پروپرتی دیتاگرید رو Set میکنید:
RowStyleSelector="{StaticResource selector}"
Amir Oveisi
پنج شنبه 13 مهر 1391, 08:15 صبح
ساده ترین راه استفاده از DataTrigger هست. کافیه برای ListViewItem هاتون یک Style تعریف کنید و داخل اون DataTrigger تغریف کنید. DataTrigger مثل بقیه Trigger ها عمل می کنه، یعنی یک شرطی رو بررسی می کنه در صورت درست بودن اون شرط، یک property از اون element رو مقدار دهی می کنه.
به عنوان مثال شما میتونید کدی مثل زیر داشته باشید:
<Window.Resources>
<Style x:Key="ItemStyle" TargetType="ListViewItem">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Severity}" Value="1">
<Setter Property="Background" Value="Blue" />
</DataTrigger>
</Style>
</Window.Resources>
حالا برای استفاده از این Style در ListView باید اون رو برای property با نام ItemContainerStyle مقدار بدید:
<ListView>
ItemContainerStyle="{StaticResource ItemStyle}"
...
</ListView>
با این کار هر سطری که مقدار Severity اش برابر با 1 باشه، background اش آبی میشه.
موفق باشید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.