当前位置 : 主页 > 手机开发 > 其它 >

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

来源:互联网 收集:自由互联 发布时间:2021-06-22
是否可以在定义它的元素的XAML中调用自定义依赖项属性? 我的意思是,我的mainWindow有以下简单代码: 码 public partial class MainWindow : Window{ public static readonly DependencyProperty SpecialToProperty
是否可以在定义它的元素的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);
        }
    }
}

如何从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>

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

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

我在最初发布错误答案后找到了答案:
如果你使用andreask的答案,问题实际上在于循环依赖.我必须为所有窗口创建一个BaseClass:
1)创建一个新的Window Base类:

public class BaseWindow : Window {
    public BaseWindow() { }

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

    public double SpecialTo {
        get {
            return (double)GetValue(SpecialToProperty);
        }
        set {
            SetValue(SpecialToProperty, value);
        }
    }
}

这将是所有窗口的新基类.
2)修改您的MainWindow xaml :(将YOURNAMESPACE(2x)更改为您的命名空间名称)

<local:BaseWindow x:Class="YOURNAMESPACE.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:YOURNAMESPACE"
        Title="MainWindow" Height="350" Width="525" SpecialTo="100">
    <Grid>

    </Grid>
</local:BaseWindow>

3)您还需要修改部分MainWindow.cs:

public partial class MainWindow : BaseWindow {
        public MainWindow() {
            InitializeComponent();
        }
    }

这对我有用,但是,你总是需要在窗口声明中使用额外的xaml标记.

网友评论