我想創建某種標籤與發光的背景。爲了實現這一點,我決定在內容控件上使用樣式。發光效果來自兩個DropShadowEffects
,我希望綁定到內容控件的Foreground Property
。 Foreground Property
的類型爲Brush
,而DropShadowEffect.Color
的類型爲Color
,所以我需要在這兩者之間進行轉換。正確綁定一個IValueConverter
每當我嘗試通過轉換器設置發光顏色時,發光效果會保持爲黑色。看起來轉換器代碼甚至沒有通過。我確實在轉換器中返回了預定義的顏色(不轉換),甚至添加了一個Debug.Break(),但無濟於事。
你能告訴我我做錯了什麼,或者是否有其他可能更好的方法來實現帶有發光背景的標籤。
轉換器:
public class ColorToBrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null) return null;
if (value is Color)
{
Color color = (Color)value;
BrushConverter bc = new BrushConverter();
return bc.ConvertFrom(color);
}
Type type = value.GetType();
throw new InvalidOperationException("Unsupported type ["+type.Name+"]");
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
if (value is Brush)
{
Brush brush = (Brush)value;
BrushConverter bc = new BrushConverter();
return bc.ConvertTo(brush, typeof(Color));
}
Type type = value.GetType();
throw new InvalidOperationException("Unsupported type ["+type.Name+"]");
}
}
在資源字典:
<local:ColorToBrushConverter x:Key="Color2BrushConverter" />
<Style x:Key="ContentControlGlowStyle" TargetType="{x:Type ContentControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ContentControl}">
<Border>
<Border.Effect>
<DropShadowEffect
BlurRadius="15"
Color="{Binding Path=Foreground, Converter={StaticResource Color2BrushConverter}}"
ShadowDepth="2"
Direction="0"/>
</Border.Effect>
<TextBlock Name="Highlight" Foreground="{TemplateBinding Foreground}" Text="{TemplateBinding Content}" Margin="10,5,0,0">
<TextBlock.Effect>
<DropShadowEffect
BlurRadius="15"
Color="{Binding Path=Foreground,Converter={StaticResource Color2BrushConverter}}"
ShadowDepth="2"
Direction="0"/>
</TextBlock.Effect>
</TextBlock>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
和XAML:
<ContentControl Name="cc2" Style="{DynamicResource ContentControlGlowStyle}"
FontSize="24"
Foreground="LightBlue"
Background="LightBlue"
Content="some content to display"
FontFamily="Verdana" />
你應該看看輸出窗口,看看它是否顯示任何異常。這可以讓你更瞭解正在發生的事情。 – TYY 2013-03-15 14:26:08
VS不會抱怨輸出窗口中的綁定。 – 2013-03-15 14:28:04
想到的另一件事是設置一個相對顏色綁定的來源。 – TYY 2013-03-15 14:32:37