c# - UWP 中的 InkCanvas MVVM 绑定(bind)

标签 c# mvvm uwp inkcanvas

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

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

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

但是我得到了错误:“无法分配属性 Strokes”... 我是这样使用的:

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

绑定(bind)来 self 的 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 .

关于c# - UWP 中的 InkCanvas MVVM 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41395214/

相关文章:

c# - 为 MQTTnet 客户端消息的 TLS/SSL 加密导入的 PFX 证书适用于服务,但在 Xamarin UWP 应用程序中失败

c# - Chrome Postman 将证书添加到发送到服务的请求中

c# - 什么时候在WPF中引发CollectionViewSource.Filter事件?

uwp - 通用 Windows 应用程序无法启动, "AppxDeploymentFailureBlue"

UWP 错误 CS5001 程序不包含适用于入口点的静态 'Main' 方法

javascript - 通过 http 发送音频文件

c# - 将 SalesForce 日历与 Google 日历同步

wpf - mvvm light icleanup 和 messenger 在 VB.NET 中注销

c# - 属性更改时在ViewModel中执行方法