从XAML调用代码隐藏中定义的自定义依赖项属性

Mor*_*goZ 5 wpf xaml dependency-properties code-behind

是否可以在定义它的元素的XAML中调用自定义依赖项属性?

我的意思是,我的mainWindow有以下简单代码:

public partial class MainWindow : Window
{

    public static readonly DependencyProperty SpecialToProperty =   DependencyProperty.Register("SpecialTo", typeof(double), typeof(MainWindow));

    public MainWindow()
    {

        InitializeComponent();

    }

    public double SpecialTo
    {
        get
        {
            return (double)GetValue(SpecialToProperty);
        }
        set
        {
            SetValue(DoubleAnimation.ToProperty, value);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如何从MainWindow类的XAML部分代码中使用该依赖项属性?

我的意思是:

<Window x:Class="WpfAnimationTEst.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525"        
    SpecialTo=200>
Run Code Online (Sandbox Code Playgroud)

我知道可以使用附加的依赖属性来完成它,但这是唯一的方法吗?是不是可以调用代码隐藏中定义的依赖项属性?

谢谢你,如果这个问题有点愚蠢,我很抱歉,我只是在学习并试图理解WPF.

and*_*ask 0

您可以在 XAML 中使用自定义依赖项属性,但前提是您在 XAML 中实例化控件。以自定义元素为例TextBox

public class MyTextBox : TextBox
{
    public static readonly DependencyProperty SpecialToProperty = DependencyProperty.Register("SpecialTo", typeof(double), typeof(MyTextBox));

    public double SpecialTo
    {
        get
        {
            return (double)GetValue(SpecialToProperty);
        }
        set
        {
            SetValue(DoubleAnimation.ToProperty, value);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您当然可以MyTextBox在 XAML 中创建一个实例并在那里分配SpecialTo属性:

<custom:MyTextBox SpecialTo="1.0" />
Run Code Online (Sandbox Code Playgroud)

但是,在您的情况下,您没有实例化自定义 class MainWindow,而是创建了 class 的新实例Window,并且该类Window不知道自定义依赖属性(该SpecialTo属性甚至在 中不可用Window,因为您在班上MainWindow)。

为了识别依赖属性,您需要MainWindow直接实例化:

<custom:MainWindow
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525"        
    SpecialTo=200>
Run Code Online (Sandbox Code Playgroud)

但是,这意味着您需要省略x:class用于组合 XAML 和窗口代码隐藏的指令(否则您会遇到循环依赖),并且我不确定这是否正确初始化您的窗口...