【问题标题】:InkCanvas MVVM binding in UWPUWP 中的 InkCanvas MVVM 绑定
【发布时间】:2017-05-14 16:39:59
【问题描述】:

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

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

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

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

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

绑定来自我的 ViewModel。

【问题讨论】:

  • 您好,有更新吗?我的回答解决了你的问题吗?这是一个可以接受的答案吗?
  • 该死的......我没有收到你的回答的消息......我会在接下来的几天里试试。很抱歉。

标签: c# mvvm uwp inkcanvas


【解决方案1】:

这里的问题是您创建的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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 2016-04-09
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 2020-08-02
    相关资源
    最近更新 更多