【发布时间】:2016-11-03 14:10:33
【问题描述】:
如何仅通过 C# 中的代码绑定对象的 Canvas.Top 和 Panel.ZIndex 属性?我想获得元素越低,其ZIndex 越高。我对 WPF 有点陌生,所以我不知道该怎么做。
【问题讨论】:
如何仅通过 C# 中的代码绑定对象的 Canvas.Top 和 Panel.ZIndex 属性?我想获得元素越低,其ZIndex 越高。我对 WPF 有点陌生,所以我不知道该怎么做。
【问题讨论】:
您可以创建一个绑定,如下所示。 Path 字符串中的括号是必需的,因为源属性是附加属性。
element.SetBinding(Panel.ZIndexProperty,
new Binding
{
RelativeSource = RelativeSource.Self,
Path = new PropertyPath("(Canvas.Top)")
});
您也可以像这样直接将源 DependencyProperty 传递给 PropertyPath 构造函数:
element.SetBinding(Panel.ZIndexProperty,
new Binding
{
RelativeSource = RelativeSource.Self,
Path = new PropertyPath(Canvas.TopProperty)
});
从double 到int 的转换是由框架隐式完成的。但是,如果您需要一些“缩放”因子,您还必须添加一个绑定转换器。
【讨论】:
你可以试试这个:
<Canvas>
<Border Panel.ZIndex="{Binding Location, Converter={StaticResource DoubleToIntConverter}}" Canvas.Top="{Binding Location}"/>
</Canvas>
DoubleToIntConverter 是一个转换器,它接受一个 Double 并返回一个 int。 Location 是存储在 ViewModel 中的 Double。
【讨论】: