gpt4 book ai didi

c# - UWP:具有默认值 ThemeResource 的 DependencyProperty

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

我有一个以 FontIcon 作为正文的自定义 UIElement。

FontIcon 有一个 Foreground 属性,我想将其绑定(bind)到 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 ); }
}

在我的声明中,PropertyMetadatadefaultValue 为 null,我希望它成为 ThemeResource 的值。

遗憾地使用

<FontIcon x:Name="Glyph"
FontFamily="Segoe UI Symbol"
Glyph="&#xE001;"
FontSize="20"
Foreground="{Binding Path=ForegroundColor,FallbackValue={ThemeResource SystemControlHighlightAltChromeWhiteBrush}}" />

不起作用,它给出一个错误:

{DynamicResource} can only be used with dependency property

如何为 ThemeResource 设置默认值?是在 PropertyMetadata 的代码隐藏中还是在 XAML 中?

最佳答案

如果您在 PropertyMetadata 的属性更改回调中调用一个方法来设置“字形”的前景会怎样。

所以像这样..

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 中为您的用户控件命名并将其设置为绑定(bind)的源。

例如

<UserControl x:Name="ColorCheckbox"...>
<FontIcon x:Name="Glyph"
FontFamily="Segoe UI Symbol"
Glyph="&#xE001;"
FontSize="20"
Foreground="{Binding ForegroundColor,FallbackValue={StaticResource SystemControlHighlightAltChromeWhiteBrush}, ElementName=ColorCheckbox}" />
</UserControl>

关于c# - UWP:具有默认值 ThemeResource 的 DependencyProperty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37479797/

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