WPF: привязка заливки и фоновой кисти к свойству в подложке CS - PullRequest
0 голосов
/ 29 августа 2018

Я сделал usercontrol, который представляет собой иконку, которую я хочу использовать в своем проекте.

Я хочу иметь свойство IconColour, которое я могу использовать для изменения цвета моего Icon на разные цвета в разных ситуациях, при этом все равно используя один и тот же usercontrol во всем проекте.

В случае моей иконки есть части, которые я хочу закрасить в соответствии со свойством, а некоторые должны оставаться одного цвета независимо от используемой кисти. Некоторые части могут иметь / не иметь маскировку, некоторые части могут быть анимированными и т. Д.

Моя проблема в том, что независимо от кисти, которую я использую в своем свойстве IconColour, значок отображается прозрачным (предположительно с использованием кисти по умолчанию, потому что что-то не работает должным образом).

Я хочу знать, как правильно связать свое свойство IconColour со свойством Brush из Polygon ниже, чтобы я мог установить IconColour для кисти по своему выбору inline, где бы ни находился пользовательский контроль ссылки.


Фрагмент из пользовательского элемента управления Icon

<UserControl>
...
<DrawingGroup Transform="1,0,0,1,227,21">
    <GeometryDrawing Brush="{Binding IconBrush}">
        <GeometryDrawing.Geometry>
            <PathGeometry Figures="M46,51L46,51 46,23 68.4,37z" FillRule="EvenOdd" />
        </GeometryDrawing.Geometry>
    </GeometryDrawing>
</DrawingGroup>
...
</UserControl>

Поддержка C # для Icon User Control

namespace Style.Images.Icons.Playback.PlaybackPanelIcons
{
    public partial class PlayIcon
    {
        public Brush IconBrush
        {
            get { return (Brush)GetValue(IconBrushProperty); }
            set { SetValue(IconBrushProperty, value); }
        }

        public static readonly DependencyProperty IconBrushProperty =
            DependencyProperty.Register("IconBrush", typeof(Brush), typeof(PlayIcon), new PropertyMetadata(new SolidColorBrush(Color.FromRgb(255,0,255)), new PropertyChangedCallback(OnIconBrushChanged)));
        public PlayIcon()
        {
            InitializeComponent();
            IconBrush = new SolidColorBrush(Color.FromRgb(240, 255, 5));
        }

        private static void OnIconBrushChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
        {
            PlayIcon icon = sender as PlayIcon;
            icon.IconBrush = (Brush) args.NewValue;
        }
    }
}

Фрагмент, из которого используется Icon User Control

<Button>
    <StackPanel>
        <Icons:PlayIcon IconBrush="Green" Width="28" Height="28" />
    </StackPanel>
</Button>

1 Ответ

0 голосов
/ 29 августа 2018

Попробуйте это:

<GeometryDrawing Brush="{Binding IconBrush, RelativeSource={RelativeSource AncestorType=UserControl}}">

Он должен связывать свойство Brush GeometryDrawing со свойством IconBrush родительского элемента UserControl.

...