WPF:将静态资源绑定到用户控件中的依赖项属性

盖尔·詹姆斯

我有一个用户控件,它是一个图标容器。

<Rectangle x:Name="Rectangle"
           Width="{Binding SquareWidth}"
           Height="{Binding SquareWidth}"
           Fill="{Binding FillBrush}"
           DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}, Mode=OneWay}">
    <Rectangle.OpacityMask>
        <VisualBrush Visual="{Binding VisualItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Stretch="UniformToFill" />
    </Rectangle.OpacityMask>
</Rectangle>

在代码隐藏中:

    public static readonly DependencyProperty CanvasItemDependencyProperty =
        DependencyProperty.Register(nameof(VisualItem), typeof(Canvas),
            typeof(SquareIcon), new FrameworkPropertyMetadata());

    public Canvas VisualItem
    {
        get => GetValue(CanvasItemDependencyProperty) as Canvas;
        set => SetValue(CanvasItemDependencyProperty, value);
    }

图标绘图被定义为资源字典中的 Canvas 项目:

<Canvas x:Key="appbar_3d_3ds" Width="76" Height="76" Clip="F1 M 0,0L 76,0L 76,76L 0,76L 0,0">
    <Path Width="32" Height="40" Canvas.Left="23" Canvas.Top="18" Stretch="Fill" Fill="{DynamicResource BlackBrush}" Data="F1 M 27,18L 23,26L 33,30L 24,38L 33,46L 23,50L 27,58L 45,58L 55,38L 45,18L 27,18 Z "/>
</Canvas>

我在主窗体中实例化我的用户控件,如下所示:

<controls:SquareIcon VisualItem="{StaticResource appbar_information_circle}" Width="16" Height="16" FillBrush="Black" SquareWidth="16" Margin="0,0,5,0"/>

但我得到的只是一个透明的正方形。

如果我用“StaticResource appbar_information_circle”替换“Binding VisualItem”,图标就会出现。

我错过了什么?

克莱门斯

您没有遵循依赖属性的强制性命名约定。调用的依赖属性的标识符字段VisualItem必须命名为VisualItemProperty,否则 XAML 解析器无法解析它。

public static readonly DependencyProperty VisualItemProperty =
    DependencyProperty.Register(
        nameof(VisualItem), typeof(Canvas), typeof(SquareIcon));

public Canvas VisualItem
{
    get => (Canvas)GetValue(VisualItemProperty)
    set => SetValue(VisualItemProperty, value);
}

as在属性 getter 中使用操作符是没有用的,因为属性值总是一个 Canvas。如果不是(这是一个编程错误),您将希望获得 InvalidCastException 而不是 NullReferenceException。

您还应该考虑将依赖属性的类型从 Canvas 更改为Visual. 它将以相同的方式工作,但在可以将哪些元素分配给属性方面提供更大的灵活性。


请注意,在 Visual Binding 上设置Mode=TwoWayUpdateSourceTrigger=PropertyChanged是没有意义的。绑定应该是这样的:

<VisualBrush Visual="{Binding VisualItem}" .../>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

WPF依赖项属性绑定到用户控件

来自分类Dev

WPF依赖项属性绑定到用户控件

来自分类Dev

WPF用户控件依赖项属性绑定

来自分类Dev

我可以通过绑定到wpf父控件上的属性的依赖项属性在xaml中设置用户控件datacontext吗?

来自分类Dev

绑定到用户控件依赖项属性不起作用

来自分类Dev

在用户控件中绑定ObservableCollection依赖项属性

来自分类Dev

用户控件累积依赖项属性绑定

来自分类Dev

WPF用户控件双向绑定依赖属性

来自分类Dev

用户控件的依赖项属性-WPF

来自分类Dev

WPF:用户控件的依赖项属性

来自分类Dev

WPF MVVM将图像控件绑定到资源中的图像

来自分类Dev

WPF MVVM将图像控件绑定到资源中的图像

来自分类Dev

将具有依赖项属性的值从一个类绑定到wpf中的另一个类文本框控件

来自分类Dev

WPF数据将ViewModel属性绑定到用户控件内部的ListBox中,背后的代码

来自分类Dev

绑定到wpf自定义控件依赖项属性以获取工具提示吗?

来自分类Dev

绑定到wpf自定义控件依赖项属性以获取工具提示吗?

来自分类Dev

如何正确绑定到MVVM框架中用户控件的依赖项属性

来自分类Dev

尝试绑定到同一用户控件的依赖项属性时出错

来自分类Dev

使依赖项对象属性可绑定为静态资源?

来自分类Dev

自定义控件中的属性绑定到依赖项属性不起作用

来自分类Dev

将属性绑定到用户控件

来自分类Dev

UWP用户控件:绑定依赖项属性的集合更改事件

来自分类Dev

绑定到子控件内部行为的依赖项属性

来自分类Dev

WPF自定义控件依赖项属性中未知对象的双向绑定问题

来自分类Dev

在允许双向绑定的用户控件中创建依赖项属性的正确方法是什么

来自分类Dev

尝试将资源模板绑定到用户控件

来自分类Dev

将ListView选定项绑定到用户控件

来自分类Dev

在WPF中绑定到静态类中的静态属性

来自分类Dev

在WPF中绑定到静态类中的静态属性

Related 相关文章

  1. 1

    WPF依赖项属性绑定到用户控件

  2. 2

    WPF依赖项属性绑定到用户控件

  3. 3

    WPF用户控件依赖项属性绑定

  4. 4

    我可以通过绑定到wpf父控件上的属性的依赖项属性在xaml中设置用户控件datacontext吗?

  5. 5

    绑定到用户控件依赖项属性不起作用

  6. 6

    在用户控件中绑定ObservableCollection依赖项属性

  7. 7

    用户控件累积依赖项属性绑定

  8. 8

    WPF用户控件双向绑定依赖属性

  9. 9

    用户控件的依赖项属性-WPF

  10. 10

    WPF:用户控件的依赖项属性

  11. 11

    WPF MVVM将图像控件绑定到资源中的图像

  12. 12

    WPF MVVM将图像控件绑定到资源中的图像

  13. 13

    将具有依赖项属性的值从一个类绑定到wpf中的另一个类文本框控件

  14. 14

    WPF数据将ViewModel属性绑定到用户控件内部的ListBox中,背后的代码

  15. 15

    绑定到wpf自定义控件依赖项属性以获取工具提示吗?

  16. 16

    绑定到wpf自定义控件依赖项属性以获取工具提示吗?

  17. 17

    如何正确绑定到MVVM框架中用户控件的依赖项属性

  18. 18

    尝试绑定到同一用户控件的依赖项属性时出错

  19. 19

    使依赖项对象属性可绑定为静态资源?

  20. 20

    自定义控件中的属性绑定到依赖项属性不起作用

  21. 21

    将属性绑定到用户控件

  22. 22

    UWP用户控件:绑定依赖项属性的集合更改事件

  23. 23

    绑定到子控件内部行为的依赖项属性

  24. 24

    WPF自定义控件依赖项属性中未知对象的双向绑定问题

  25. 25

    在允许双向绑定的用户控件中创建依赖项属性的正确方法是什么

  26. 26

    尝试将资源模板绑定到用户控件

  27. 27

    将ListView选定项绑定到用户控件

  28. 28

    在WPF中绑定到静态类中的静态属性

  29. 29

    在WPF中绑定到静态类中的静态属性

热门标签

归档