InkCanvas MVVM绑定在UWP

InkCanvas MVVM绑定在UWP

问题描述:

我有一个列表与InkStrokeContainer ListView中,我尝试绑定InkCanvas它。在WPF中,InkCanvas具有Strokes属性,但在UWP中不可用。另一个想法是绑定到InkPresenter,但如何?InkCanvas MVVM绑定在UWP

然后我的想法是创建一个InkCanvasControl,它从InkCanvas扩展并创建Strokes属性。

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

但是有了这个,我得到了错误:“无法分配财产笔画” ...... 我用这种方式:

<controls:InkCanvasControl Strokes="{Binding Strokes}"></controls:InkCanvasControl> 

,并且绑定是从我的ViewModel。

+0

嗨,有没有更新?我的答案是否解决了您的问题?这是一个可接受的答案吗? –

+0

那该死的..我没有收到你的回信的消息...我会在接下来的几天尝试。对不起。 – R3Tech

这里的问题是你创建的Strokes属性不是一个依赖项属性,所以它不会支持绑定,这就是你得到错误的原因。为了解决这个问题,你可以像下面的注册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