You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);

但该操作无效,请问问题出在哪里?


问题根源与修复方案

  1. 属性归属不匹配
    你创建的是SKQuantitySpinEdit类型的元素,却试图设置SKSingleSpinner的IncrementProperty——这两个是完全不同的控件类型,SKQuantitySpinEdit并不会继承你在SKSingleSpinner中定义的自定义依赖属性,所以这个设置不会对目标控件产生任何影响。

  2. 正确的处理方向

  • 如果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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 21:58:37