gpt4 book ai didi

c# - 正确绑定(bind) IValueConverter

转载 作者:行者123 更新时间:2023-11-30 17:06:19 25 4
gpt4 key购买 nike

我正在尝试创建某种带有发光背景的标签。为此,我决定在内容控件上使用一种样式。发光效果来自两个 DropShadowEffects,我希望将其绑定(bind)到内容控件的 Foreground 属性Foreground PropertyBrush 类型,DropShadowEffect.ColorColor 类型,所以我需要转换在这两者之间。

每当我尝试通过转换器设置发光颜色时,发光效果都会保持黑色。转换器代码似乎从未通过。我确实在转换器中返回了预定义的颜色(无转换),甚至添加了 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" />

最佳答案

要解决您面临的问题,您需要将相对源设置为颜色绑定(bind)。知道它不是您的转换器问题的诀窍是它从未被调用并且 VS 不会吐出任何错误,这意味着已选择默认值。

关于c# - 正确绑定(bind) IValueConverter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15434723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com