WPF:将填充和背景画笔绑定到支持CS中的属性

时间:2018-08-29 13:39:47

标签: c# wpf xaml properties dependencies

我制作了一个usercontrol,它代表一个我想在整个项目中使用的图标。

我希望能够拥有一个属性IconColour,该属性可用于在不同情况下将图标的颜色更改为不同的颜色,同时在整个项目中仍使用相同的单个usercontrol

就我的图标而言,有些属性需要根据属性进行着色,并且无论使用哪种画笔,有些属性都应保持相同的颜色。某些部分可能/可能没有遮罩,某些部分可能设置了动画等。

我的问题是,不管我在IconColour属性上使用的画笔如何,图标都呈现为透明状态(大概是使用默认画笔,因为某些东西无法正常工作)。

我想知道如何将我的IconColour属性正确绑定到下面Brush的{​​{1}}属性,以便可以将Polygon设置为画笔我选择的内联引用用户控件的位置。


图标用户控件中的代码段

IconColour

支持C#进行图标用户控制

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

使用图标用户控件的代码段

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;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

尝试一下:

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

它应该将Brush的{​​{1}}属性绑定到父GeometryDrawing的{​​{1}}属性。