2016-05-27 2 views
2

У меня есть пользовательский UIElement с FontIcon как тело.UWP: DependencyProperty с DefaultValue ThemeResource

Этот FontIcon имеет свойство Foreground, которое я хочу связать с DependencyProperty.

The 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 о PropertyMetadata имеет нулевое значение, я хочу, чтобы это было значение 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?

ответ

1

Что делать, если вы вызываете метод установки переднего плана «Символ» в свойстве измененного обратного вызова в 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 дайте пользовательский элемент управления имени и установить, что в качестве источника привязки.

например.

<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> 
+0

Глиф не будет доступен в статическом контексте. Он также чувствует себя взломанным, чтобы вручную установить свойство «Переднего плана» Glyph вручную. – ManIkWeet

+0

Извините, исправлено, что – H77

+0

И добавил возможное решение XAML – H77

Смежные вопросы