[英]Style based on property value
我正在嘗試設置應用程序的通信模塊樣式。 我從數據模板內綁定的外部API獲取了一些數據。 我想基於Status屬性的值更改ListView ItemTemplate樣式。
如果狀態為“新”,則網格的邊界應為2px橙色,如果狀態為“已讀”,則網格的邊界應為1px灰色。
我已經使用轉換器實現了這一目標,但我敢肯定有更好的方法。
XAML文件
<ListView ItemsSource="{Binding ConversationsList}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Padding" Value="0,0,0,0"/>
<Setter Property="Margin" Value="0,0,0,0"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<Grid BorderBrush="{Binding status, Converter={StaticResource StatusToBorder}, ConverterParameter=BorderBrush}"
BorderThickness="{Binding status, Converter={StaticResource StatusToBorder}, ConverterParameter=BorderThickness}"
Background="White"
Margin="5,5,5,5">
轉換器文件
class StatusToBorder : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
var param = parameter as String;
var _value = value as String;
switch (param) {
case "BorderBrush":
if (_value == "new")
return "#FFFF5917";
else
return "#FFAAAAAA";
case "BorderThickness":
if (_value == "new")
return new Thickness(2, 2, 2, 2);
else
return new Thickness(1, 1, 1, 1); ;
default:
return null;
break;
}
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
您需要使用xaml為Grid命名。 在xaml中:
<Grid x:Name=MyGrid
IsRead="{Binding Read}"...>
然后在您的代碼中將網格標記為已讀或未讀:
在Java中:
MyGrid.BorderBrush = new SolidColorBrush(Windows.UI.Colors.Orange);
MyGrid.BorderThickness = new Thickness(3);
MyGrid.BorderBrush = new SolidColorBrush(Windows.UI.Colors.Gray);
MyGrid.BorderThickness = new Thickness(1);
我假設您知道如何設置數據上下文和資源等。如果沒有,那么此教程將更全面地介紹數據綁定:
https://msdn.microsoft.com/zh-CN/library/windows/apps/jj207023(v=vs.105).aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.