我有一个自定义的UIElement,其中FontIcon
为正文。
此FontIcon
具有Foreground
属性,我想将其绑定到DependencyProperty
。
DependencyProperty
声明如下:
public static readonly DependencyProperty ForegroundColorProperty = DependencyProperty.Register( "ForegroundColor", typeof( Brush ),
typeof( ColorableCheckbox ),
new PropertyMetadata( null, null ) );
public Brush ForegroundColor
{
get { return (Brush)GetValue( ForegroundColorProperty ); }
set { SetValue( ForegroundColorProperty, value ); }
}
在我的声明中,defaultValue
的{{1}}为空,我希望这是PropertyMetadata
的值。
遗憾地使用
ThemeResource
不起作用,它会出错:
<FontIcon x:Name="Glyph"
FontFamily="Segoe UI Symbol"
Glyph=""
FontSize="20"
Foreground="{Binding Path=ForegroundColor,FallbackValue={ThemeResource SystemControlHighlightAltChromeWhiteBrush}}" />
如何将默认值设置为{DynamicResource} can only be used with dependency property
?在代码隐藏中使用ThemeResource
还是在XAML中?
答案 0 :(得分:1)
如果您调用方法在PropertyMetadata中的属性更改回调中设置“Glyph”的前景,该怎么办。
这样的事情......
public static readonly DependencyProperty ForegroundColorProperty = DependencyProperty.Register("ForegroundColor", typeof(Brush), typeof(ColorableCheckbox), new PropertyMetadata(null, UpdateForeground));
private static void UpdateForeground(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
var ctrl = (ColorableCheckbox) obj;
var brush = args.NewValue as Brush;
if (brush == null)
return;
ctrl.Glyph.Foreground = brush;
}
或者在XAML中为您的用户控制一个名称并将其设置为绑定的源。
e.g。
<UserControl x:Name="ColorCheckbox"...>
<FontIcon x:Name="Glyph"
FontFamily="Segoe UI Symbol"
Glyph=""
FontSize="20"
Foreground="{Binding ForegroundColor,FallbackValue={StaticResource SystemControlHighlightAltChromeWhiteBrush}, ElementName=ColorCheckbox}" />
</UserControl>