Silverlightで、ボタンの色をその内容の値に応じて変更するにはどうすればよいですか。たとえば、「0」=赤、「1」=緑..
VisualStateMangerを確認しましたが、その方法がわかりません。マウスオーバーなどでは簡単ですが、データの値ではわかりません。
Silverlightで、ボタンの色をその内容の値に応じて変更するにはどうすればよいですか。たとえば、「0」=赤、「1」=緑..
VisualStateMangerを確認しましたが、その方法がわかりません。マウスオーバーなどでは簡単ですが、データの値ではわかりません。
必要なのは、の実装である値コンバーターですIValueConverter
。このブログ記事では、タスクに使用できるのコードを見つけStringToObjectConverter
ます。ここでコードを再現します:-
using System;
using System.Windows;
using System.Windows.Data;
using System.Linq;
using System.Windows.Markup;
namespace SilverlightApplication1
{
[ContentProperty("Items")]
public class StringToObjectConverter : IValueConverter
{
public ResourceDictionary Items { get; set; }
public string DefaultKey { get; set; }
public StringToObjectConverter()
{
DefaultKey = "__default__";
}
public virtual object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null && Items.Contains(value.ToString()))
return Items[value.ToString()];
else
return Items[DefaultKey];
}
public virtual object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return Items.FirstOrDefault(kvp => value.Equals(kvp.Value)).Key;
}
}
}
これで、このコンバーターのインスタンスをユーザー コントロールのリソースに追加できます。
<UserControl.Resources>
<local:StringToObjectConverter x:Key="StatusToBrush">
<ResourceDictionary>
<SolidColorBrush Color="Red" x:Key="0" />
<SolidColorBrush Color="Green" x:Key="1" />
<SolidColorBrush Color="Silver" x:Key="__default__" />
</ResourceDictionary>
</local:StringToObjectConverter>
</UserControl>
これで、を値にバインドできBackground
ます:-
<Button Background="{Binding Value, Converter={StaticResource StatusToBrush}}">
<TextBlock Text="{Binding Value}" />
</Button>