背景が光るある種のラベルを作成しようとしています。これを実現するために、コンテンツコントロールでスタイルを使用することにしました。グロー効果は、コンテンツコントロールDropShadowEffects
のにバインドしたい2つから来ています。Foreground Property
はForeground Property
タイプBrush
であり、DropShadowEffect.Color
はタイプColor
であるため、これら2つを変換する必要があります。
コンバーターを介してグローカラーを設定しようとすると、グロー効果は黒のままになります。コンバーターコードが渡されることさえないようです。コンバーターで事前定義された色(変換なし)を返し、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" />