Путь к наследованию цвета кисти переднего плана предка - PullRequest
0 голосов
/ 15 июня 2019

В настоящее время я пишу расширение для объекта Path. Я хочу, чтобы он наследовал его (первый) Control предок Foreground цвет.

Это то, что у меня есть ...

public override void OnValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
    if (sender is Path path)
    {
        path.Loaded -= Path_Loaded;
        path.Loaded += Path_Loaded;
    }
}

private void Path_Loaded(object sender, System.EventArgs e)
{
    if (!(sender is Path path))
    {
        return;
    }

    // Find first ancestor
    var parent = path.Parents().OfType<Control>().FirstOrDefault();

    if (parent != null)
    {
        // Apply the template
        parent.ApplyTemplate();

        // Set parent's control foreground
        path.Fill = parent.Foreground;
    }
    else
    {
        // Fallback to default
        path.Fill = Brushes.Black;
    }
}

Он отлично работает для простого управления, однако его недостатком является то, что после установки Fill он уходит навсегда. Я хотел бы, чтобы он также наследовал передний план, когда передний план предка меняет из-за триггера (например, при наведении курсора или любой другой привязки).

Что я пробовал : проверка предка на наличие любых триггеров, затем подключение мыши к событию ... но я считаю его слабым, одномерным решением, поскольку оно не повлияет на другие триггеры.

Как я могу применить «живой» цвет элемента управления предка, как он меняется?

редактировать

Это простое связывание делает именно то, что я хочу, однако оно выводит предупреждения в консоли, если не был найден предок:

<Path Fill="{Binding Foreground, FallbackValue=Black, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Control}}"/>
...