我有一个由另一个控件动态创建的自定义控件,我想根据父级的VisualState更改其VisualState。
VisualState是一个接受枚举器的DependencyProperty
,控件在OnPropertyChange
事件内部使用它来改变大小和内部布局。
两个控件上的属性相同(当然除了类型)。
public ControlSize VisualState
{
get { return (ControlSize)GetValue(VisualStateProperty); }
set
{
if (value != VisualState)
{
SetValue(VisualStateProperty, value);
}
}
}
public static readonly DependencyProperty VisualStateProperty = DependencyProperty.RegisterAttached(nameof(VisualState), typeof(ControlSize), typeof(CountersListControl), new PropertyMetadata(ControlSize.Large, OnVisualStateChanged));
父控件动态分配组件并将其VisualState绑定到新控件VisualState:
CounterControl cc = new CounterControl();
cc.SetBinding(CounterControl.ValueProperty, new Binding() { Path = new PropertyPath(nameof(Counter.Amount)), Source = counter, Mode = BindingMode.TwoWay });
//cc.DataContext = this;//I tried with it, but it doesn't change a thing
cc.SetBinding(CounterControl.VisualStateProperty, new Binding() { Path = new PropertyPath(nameof(VisualState)), Source = this, Mode = BindingMode.OneWay });
Value
属性在没有任何问题的情况下绑定到Counter.Amount,并且看起来也是VisualState。
但是在更改父级时调用OnVisualState
方法,而不更改子级值。
更新:我按照@EdPlunkett的建议调试了绑定,我收到以下消息:
错误:转换器无法将“Windows.Foundation.Int32”类型的值转换为“ControlSize”类型;
ControlSize
是一个可枚举的,所以它应该可以转换它。