自定义附加属性的模板绑定

贾廷

我正在尝试使用按钮控件中的图像,该图像通过显示不同的图像来对“悬停”和“按下”状态进行动画处理。因此,我为按钮控件定义了3个附加属性,如下所示。

public class ButtonExtensions : DependencyObject {
    public static DependencyProperty ImageSourceProperty = ...
    public static DependencyProperty ImageHoverSourceProperty = ...
    public static DependencyProperty ImagePressedSourceProperty =
        DependencyProperty.RegisterAttached("ImagePressedSource", typeof(string), typeof(ButtonExtensions));
    public static string GetImagePressedSource(Button target) { return (string)target.GetValue(ImagePressedSourceProperty); }
    public static void SetImagePressedSource(Button target, string value) { target.SetValue(ImagePressedSourceProperty, value); }

我在Button的Style属性设置器中设置了这些属性,如下所示

    <Style x:Key="AddButtonStyle" TargetType="{x:Type Button}" >
        <Setter Property="gs:ButtonExtensions.ImageSource" Value="/HotelReservation.ControlLibrary;component/Images/add-record-icon.png"/>
        <Setter Property="gs:ButtonExtensions.ImageHoverSource" Value="/HotelReservation.ControlLibrary;component/Images/add-record-hover-icon.png"/>
        <Setter Property="gs:ButtonExtensions.ImagePressedSource" Value="/HotelReservation.ControlLibrary;component/Images/add-record-pressed-icon.png"/>

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Grid Height="32" Width="32">
                        <!-- How to use TemplateBinding Here. This does not work -->
                        <Image Name="Normal" Source="{TemplateBinding Property=gs:ButtonExtensions.ImageSource}" />
/>
                        <!-- This Works -->
                        <Image Name="Hover" Source="/HotelReservation.ControlLibrary;component/Images/add-record-hover-icon.png" Opacity="0"/>
                        <Image Name="Pressed" Source="/HotelReservation.ControlLibrary;component/Images/add-record-pressed-icon.png" Opacity="0" />
                    </Grid>
    ...

                </ControlTemplate>

            </Setter.Value>
        </Setter>
    </Style>

如您所见,我正在尝试从“按钮”的“控制模板”中访问自定义附加属性。我可以得到它通过硬编码工作来源的属性图像控制,但我wan't使用TemplateBinding代替

克莱门斯

使用附加属性作为绑定源时,需要在属性路径中使用括号。您必须使用常规绑定而不是TemplateBinding:

<Image Source="{Binding Path=(gs:ButtonExtensions.ImagePressedSource),
                        RelativeSource={RelativeSource TemplatedParent}}"/>

还请注意,当ButtonExtensions类仅声明附加属性时,不必从DependencyObject派生。

还建议将DependencyProperty字段声明为只读:

public static readonly DependencyProperty ImagePressedSourceProperty = ...

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

绑定Angular模板时自定义属性导致错误

来自分类Dev

WPF - 将自定义 DataGridTextColumn 模板的 Content 属性绑定到父级的属性

来自分类Dev

QML中的自定义附加属性

来自分类Dev

使用路径作为附加属性的WPF自定义形状的按钮模板

来自分类Dev

使用路径作为附加属性的WPF自定义形状的按钮模板

来自分类Dev

自定义依赖项属性绑定

来自分类Dev

自定义布尔属性未绑定

来自分类Dev

自定义属性没有绑定可绑定的属性

来自分类Dev

XAML - 在自定义 UserControl 中定义附加属性

来自分类Dev

绑定到子自定义控件的控件模板中父用户控件代码中定义的属性

来自分类Dev

绑定到子自定义控件的控件模板中父用户控件代码中定义的属性

来自分类Dev

如何从Windows Store应用程序中的代码绑定到C#中的自定义附加属性?

来自分类Dev

访问模板 html 模板中的自定义属性

来自分类Dev

如何使用自定义模板绑定数据收集

来自分类Dev

如何在 Knockout 中的自定义 bindingHandler 中绑定到自定义模板

来自分类Dev

在样式设置器中设置自定义附加属性

来自分类Dev

Laravel:在附加的自定义属性中添加子句

来自分类Dev

WPF-将自定义属性附加到滑块

来自分类Dev

将自定义对象属性绑定到BooleanBinding

来自分类Dev

将集合绑定到自定义控件属性

来自分类Dev

更新Aurelia自定义属性中的绑定

来自分类Dev

Android数据绑定上的自定义XML属性

来自分类Dev

JAXB自定义绑定问题-序列属性名称

来自分类Dev

重新映射敲除后未绑定自定义属性

来自分类Dev

将集合绑定到自定义控件属性

来自分类Dev

创建一个自定义绑定属性

来自分类Dev

AngularJS 自定义生成指令动态属性绑定

来自分类Dev

将自定义类的属性绑定到视图

来自分类Dev

JavaFX 8:自定义对象的属性绑定

Related 相关文章

  1. 1

    绑定Angular模板时自定义属性导致错误

  2. 2

    WPF - 将自定义 DataGridTextColumn 模板的 Content 属性绑定到父级的属性

  3. 3

    QML中的自定义附加属性

  4. 4

    使用路径作为附加属性的WPF自定义形状的按钮模板

  5. 5

    使用路径作为附加属性的WPF自定义形状的按钮模板

  6. 6

    自定义依赖项属性绑定

  7. 7

    自定义布尔属性未绑定

  8. 8

    自定义属性没有绑定可绑定的属性

  9. 9

    XAML - 在自定义 UserControl 中定义附加属性

  10. 10

    绑定到子自定义控件的控件模板中父用户控件代码中定义的属性

  11. 11

    绑定到子自定义控件的控件模板中父用户控件代码中定义的属性

  12. 12

    如何从Windows Store应用程序中的代码绑定到C#中的自定义附加属性?

  13. 13

    访问模板 html 模板中的自定义属性

  14. 14

    如何使用自定义模板绑定数据收集

  15. 15

    如何在 Knockout 中的自定义 bindingHandler 中绑定到自定义模板

  16. 16

    在样式设置器中设置自定义附加属性

  17. 17

    Laravel:在附加的自定义属性中添加子句

  18. 18

    WPF-将自定义属性附加到滑块

  19. 19

    将自定义对象属性绑定到BooleanBinding

  20. 20

    将集合绑定到自定义控件属性

  21. 21

    更新Aurelia自定义属性中的绑定

  22. 22

    Android数据绑定上的自定义XML属性

  23. 23

    JAXB自定义绑定问题-序列属性名称

  24. 24

    重新映射敲除后未绑定自定义属性

  25. 25

    将集合绑定到自定义控件属性

  26. 26

    创建一个自定义绑定属性

  27. 27

    AngularJS 自定义生成指令动态属性绑定

  28. 28

    将自定义类的属性绑定到视图

  29. 29

    JavaFX 8:自定义对象的属性绑定

热门标签

归档