如何将InkToolbar链接到CustomControl内的InkCanvas?

时间:2017-06-26 05:20:01

标签: c# xaml uwp windows-10-universal

我正在创建一个包含InkCanvas的CustomControl。现在问题是如何将InkToolbar(在CustomControl之外)链接到InkCanvas(在CustomControl中)?

解决方案:

我尝试使用以下代码将InkCanvas置于CustomControl之外,但无法正常工作

这是我的代码(我试过的解决方案是无效):

//In CustomControl Code Behind
InkCanvas PATH_INK_CANVAS;

protected override void OnApplyTemplate()
{
    PATH_INK_CANVAS = GetTemplateChild<InkCanvas>("PATH_INK_CANVAS");
}

T GetTemplateChild<T>(string elementName) where T : DependencyObject
{
    var element = GetTemplateChild(elementName) as T;
    if (element == null)
        throw new NullReferenceException(elementName);
    return element;
}

public InkCanvas InkCanvas
{
    get { return PATH_INK_CANVAS; }
}

public static readonly DependencyProperty InkCanvasProperty =
    DependencyProperty.Register("InkCanvas", typeof(InkCanvas), typeof(RichInkTextBox), new PropertyMetadata(0));

//In CustomControl XAML
<Style>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate>
                <Grid Name="MainGrid" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}">
                    <InkCanvas Name="PATH_INK_CANVAS" Canvas.ZIndex="-1"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

//In Page
<local:CustomControl x:Name="MyCustomControl"/>
<InkToolbar Grid.Row="0" TargetInkCanvas="{x:Bind MyCustomControl.InkCanvas}"/>

1 个答案:

答案 0 :(得分:0)

我认为这不是定义只读依赖项属性的正确语法。尝试使用以下内容 -

public InkCanvas InkCanvas
{
    get => (InkCanvas)GetValue(InkCanvasProperty);
    private set => SetValue(InkCanvasProperty, value);
}
public static readonly DependencyProperty InkCanvasProperty = DependencyProperty.Register(
    "InkCanvas", typeof(InkCanvas), typeof(InkCanvasWrapper), new PropertyMetadata(null));

此外,请确保将Mode的{​​{1}}设置为x:Bind,因为OneWay依赖项属性的默认值为InkCanvas(您是将默认值设置为null这是错误的。)

0