WPF C#自定义控件设置SKQuantitySpinEdit父类Increment依赖属性失效问题
问题:自定义控件中设置SKQuantitySpinEdit的Increment属性无效
我尝试在自定义控件中设置SKQuantitySpinEdit父类的Increment属性,但未能成功!
创建控件模板的代码如下:
ControlTemplate spinOptLegQuantityTemplate = (ControlTemplate)(grdMultiFills.FindResource("OptLegQuantitySpinEditEntry") as SKControlTemplate).Clone(); FrameworkElementFactory gridOptLegQuantityControlElement = new FrameworkElementFactory(typeof(SKQuantitySpinEdit)); spinOptLegQuantityTemplate.VisualTree = gridOptLegQuantityControlElement; Binding optLegQuantityControlBinding = new Binding(string.Format(BindingRowData_Row + BindingOptLegQuantity, optIndex)) { Mode = BindingMode.TwoWay }; gridOptLegQuantityControlElement.SetValue(SKQuantitySpinEdit.EditValueProperty, optLegQuantityControlBinding); gridOptLegQuantityControlElement.SetValue(SKQuantitySpinEdit.NameProperty, string.Format("OptLegQuantityControl_{0}", count)); gridOptLegQuantityControlElement.AddHandler(SKQuantitySpinEdit.EditValueChangedEvent, new EditValueChangedEventHandler(m_optLegQuantityChange_EditValueChanged)); gridOptLegQuantityControlElement.AddHandler(SKQuantitySpinEdit.LoadedEvent, new RoutedEventHandler(LegQtyControl_Loaded));
于是我在SKSingleSpinner中把Increment定义为依赖属性,代码如下:
public int Increment { get { return (int)GetValue(IncrementProperty); } set { SetValue(IncrementProperty, value); } } public static readonly DependencyProperty IncrementProperty = DependencyProperty.Register("Increment", typeof(int), typeof(SKSingleSpinner), new PropertyMetadata(0));
之后尝试通过以下代码设置其值:
gridOptLegQuantityControlElement.SetValue(SKSingleSpinner.IncrementProperty , 1);
但该操作无效,请问问题出在哪里?
问题根源与修复方案
属性归属不匹配
你创建的是SKQuantitySpinEdit类型的元素,却试图设置SKSingleSpinner的IncrementProperty——这两个是完全不同的控件类型,SKQuantitySpinEdit并不会继承你在SKSingleSpinner中定义的自定义依赖属性,所以这个设置不会对目标控件产生任何影响。正确的处理方向
- 如果
SKQuantitySpinEdit本身原生提供了Increment属性(你提到的父类属性),直接设置该控件的对应属性即可:
gridOptLegQuantityControlElement.SetValue(SKQuantitySpinEdit.IncrementProperty, 1);
- 如果需要通过
SKSingleSpinner的自定义Increment属性来传递值给内部的SKQuantitySpinEdit,需要建立属性绑定:- 在XAML模板中绑定:
<SKQuantitySpinEdit Increment="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Increment}" />- 或者在代码创建元素时绑定:
Binding incrementBinding = new Binding("Increment") { RelativeSource = new RelativeSource(RelativeSourceMode.TemplatedParent) }; gridOptLegQuantityControlElement.SetBinding(SKQuantitySpinEdit.IncrementProperty, incrementBinding);
内容的提问来源于stack exchange,提问作者Muhammad Moiz
相关产品推荐
相关产品推荐

