gpt4 book ai didi

c# - 如何创建从其他两个属性获取值的依赖属性

转载 作者:太空宇宙 更新时间:2023-11-03 11:42:55 24 4
gpt4 key购买 nike

我正在桌面上制作移动窗口的动画。我在某处发现信息,最好的方法是创建自己的属性并为其设置动画,而不是分别使用 Left 和 Top。

问题是这个属性是用值 (0, 0) 初始化的。我希望我的属性从窗口的顶部和左侧获取值,并设置它。

我的属性(property):

public static readonly DependencyProperty PositionProperty = DependencyProperty.Register("Position", typeof(Point), typeof(MainCard), 
new PropertyMetadata(PositionPropertyChanged) );

private static void PositionPropertyChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs prop)
{
MainCard mw = (MainCard)dependencyObject;
Point value = (Point)prop.NewValue;

mw.Top = value.Y;
mw.Left = value.X;
}

public Point Position
{
get
{
return (Point)GetValue(PositionProperty);
}
set
{
SetValue(PositionProperty, value);
}
}

最佳答案

查看 MultiBindingIMultiValueConverter .这将允许您绑定(bind)到两个源属性并将它们转换为您的 Position 的单个值。


编辑:听起来您在这里真正想做的是为 Point 设置动画,而不是将 Left 和 Top 值分开,因此这可能不适用于您的情况。这里真正的问题是你有一个双向问题;此属性表示与 Top 和 Left 相同的信息,因此如果更改它,则 Top 和 Left 也应更改。同样,由于 Top 和 Left 是可变的,如果它们发生变化,您真的希望您的属性能够反射(reflect)这一点。

一个选项是为 LeftProperty 和 TopProperty 注册属性更改处理程序。现在,当这些发生变化时,更新您的 PositionProperty。在这里你必须小心不要触发重复更新(我改变 Left,它改变 Position,它改变 Left,它...)

关于c# - 如何创建从其他两个属性获取值的依赖属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4232670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com