在我的项目中,我正在我的代码中创建一个滑块,在视图后面,这个滑块有一个事件,当它的值发生变化时。创建滑块的位置还具有此项目所需的自定义对象。
我希望将此自定义对象用作滑块的属性(类似于TicksProperty
中的Slider
),以便可以通过我的object sender
参数传递我创建的Slider_ValueChanged
事件。这样做的原因是我可以从另一个类(我的ViewModel
)执行现有命令,该类使用此自定义对象作为参数,每次更改value属性时。
但是,我知道没有办法向现有的WPF控件添加属性,因此我决定尝试创建一个继承自CustomSlider
的{{1}}类,其中包含{ {1}} Slider
。我试过看一些例子并创建了以下内容:
CustomObject
DependencyProperty
对此主题的任何帮助都将不胜感激。
答案 0 :(得分:1)
您已经混淆了附加属性和派生控件的概念。在派生控件中,您将使用普通依赖项属性,而不是附加属性,如下所示:
public class CustomSlider : Slider
{
public static readonly DependencyProperty CustomObjectProperty =
DependencyProperty.Register(
"CustomObject",
typeof(CustomObject),
typeof(CustomSlider),
new FrameworkPropertyMetadata(null));
public CustomObject CustomObject
{
get { return (CustomObject)GetValue(CustomObjectProperty); }
set { SetValue(CustomObjectProperty, value); }
}
}
请注意,您可能还需要使用属性元数据注册PropertyChangedCallback,以便在属性值更改时收到通知。回调看起来像这样:
private static void CustomObjectPropertyChanged(
DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
CustomSlider customSlider = (CustomSlider)obj;
...
}
现在你可以简单地设置你的属性:
var tempSlider = (CustomSlider)customObject.VarElement;
tempSlider.CustomObject = customObject;
或者您可以像这样设置绑定:
tempSlider.SetBinding(CustomSlider.CustomObjectProperty, sliderBinding);