我在ListView中有一个带有InkStrokeContainer的列表,我尝试将InkCanvas绑定(bind)到它。在WPF中,InkCanvas具有笔划属性,但在UWP中不可用。另一个想法是绑定(bind)到InkPresenter,但是如何?

然后我的想法是创建一个从InkCanvas扩展的InkCanvasControl并为笔触创建属性。

public InkStrokeContainer Strokes
{
    get
    {
        return this.InkPresenter.StrokeContainer;
    }
    set
    {
        this.InkPresenter.StrokeContainer = value;
    }
}

但是与此有关,我得到了一个错误:“无法分配属性描边” ...
我用这种方式:
<controls:InkCanvasControl Strokes="{Binding Strokes}"></controls:InkCanvasControl>

绑定(bind)来自我的ViewModel。

最佳答案

这里的问题是,您创建的Strokes属性不是依赖项属性,因此它不支持绑定(bind),这就是您收到错误的原因。要解决此问题,可以将Strokes属性注册为依赖项属性,如下所示:

public InkStrokeContainer Strokes
{
    get { return (InkStrokeContainer)GetValue(StrokesProperty); }
    set { SetValue(StrokesProperty, value); }
}

public static readonly DependencyProperty StrokesProperty = DependencyProperty.Register("Strokes",
    typeof(InkStrokeContainer), typeof(InkCanvasControl),
    new PropertyMetadata(null, new PropertyChangedCallback(OnLabelChanged)));

private static void OnLabelChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
    (d as InkCanvasControl).InkPresenter.StrokeContainer = (InkStrokeContainer)e.NewValue;
}

有关更多信息,请参见Custom dependency properties

10-06 12:05