Как изменить значение DependencyProperty от другого в UWP, FrameworkPropertyMetadata недоступен - PullRequest
0 голосов
/ 05 января 2019

Я создаю пользовательский элемент управления XAML в проекте UWP и собираюсь реализовать тот же шаблон, который я уже нашел пригодным для использования в приложениях WPF, для одновременного редактирования свойств элемента управления при изменении основного свойства DependencyProperty.

В приведенном ниже примере кода я показываю, как изменить SolidColorBrush dp (называемый "ColorBrush"), когда Color dp (называемый "Color") изменяется внешним пользователем.

В WPF этот шаблон я реализовал (правильно работает):

public partial class ColorViewer : UserControl
{

    // .ctor and other functions

    public Color Color
    {
        get { return (Color)GetValue(ColorProperty); }
        set
        {
            SetValue(ColorProperty, value);
        }
    }
    public static readonly DependencyProperty ColorProperty =
        DependencyProperty.Register("Color", typeof(Color), typeof(ColorViewer), new FrameworkPropertyMetadata(OnColorChanged));



    public SolidColorBrush ColorBrush
    {
        get { return (SolidColorBrush)GetValue(ColorBrushProperty); }
        set { SetValue(ColorBrushProperty, value); }
    }
    public static readonly DependencyProperty ColorBrushProperty =
        DependencyProperty.Register("ColorBrush", typeof(SolidColorBrush), typeof(ColorViewer), null);


    private static void OnColorChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
    {
        var c = (Color) e.NewValue;

        ColorViewer view = source as ColorViewer;
        view.UpdateColorProperties(c);
    }

    private void UpdateColorProperties(Color c)
    {
        ColorBrush = new SolidColorBrush(c);

        // Many other things...
    }
 }

В частности, я передал FrameWorkPropertyMetadata (с методом в качестве параметра) в настройку "Color" dp.

С моим большим (и печальным) удивлением я обнаружил, что FrameworkPropertyMetadata недоступен на платформе UWP!

Как я могу получить такой же результат в UWP?

Спасибо за внимание.

С уважением

1 Ответ

0 голосов
/ 06 января 2019

У него нет этого, потому что imho его больше раздувает, чем что-либо, Uwp имеет гораздо более простой класс ProperyMetadata, который позволяет вам установить значение dp по умолчанию, а если вы хотите пойти глубже, он также позволяет вам установить CallBack, который вызывается при изменении значения.

Последний аргумент в этой функции .Register() - это то, куда идет ProperyMetadata.

Отметим, что типы кистей, такие как SolidColorBrush dp, будут автоматически и автоматически сгруппированы в группу Brush на панели свойств, разные типы dp часто будут перечислены под Общее группа

...