我正在尝试将标签绑定到两个属性以对第二个属性的变化做出反应。
这背后的基础是在公制和英制之间切换时更改字段的单位标签:
图片 http://s7.postimage.org/wmw3vofmj/test.png
XAML 代码如下所示:
<Label Name="UnitLabel" Grid.Column="1" Foreground="#FF1414AA" HorizontalContentAlignment="Right" VerticalContentAlignment="Center" Padding="2,2,5,2">
<Label.Content>
<MultiBinding Converter="{units:UnitConvertor}" Mode="OneWay">
<Binding Path="Unit" />
<Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=base:MainForm, AncestorLevel=3}" Path="Document.Units" />
</MultiBinding>
</Label.Content>
</Label>
标签承载在用户控件上,实际文档具有许多控件:
图像 http://s9.postimage.org/47hvp9uyn/test.png
文档对象如下所示:
public class Document : DependencyObject
{
public static readonly DependencyProperty UnitsProperty =
DependencyProperty.Register("Units", typeof (UnitSet), typeof (Document), new PropertyMetadata(default(UnitSet)));
public UnitSet Units
{
get { return (UnitSet) GetValue(UnitsProperty); }
set { SetValue(UnitsProperty, value); }
}
public Document()
{
Units = UnitSet.Imperial;
}
}
然后,我尝试设置 Units 属性:
private void ChangeUnit(object sender, RoutedEventArgs e)
{
if (sender == Metric)
{
Document.Units = UnitSet.Metric;
}
else if (sender == Imperial)
{
Document.Units = UnitSet.Imperial;
}
}
但是,单位标签无法更新。我需要做什么来解决这个问题?如果错过了任何明显的东西,很抱歉,我两天前开始了 WPF。
我不知道你完整的XAML树,但我认为你的祖先级别不正确。 我猜 MainForm 是你的根元素,但你在那个绑定中说你正在寻找该标签上方的第三个 MainForm。尝试完全消除祖先等级。 它默认为 1。