Установите значение присоединенного свойства в UserControl, используя синтаксис элемента - PullRequest
0 голосов
/ 08 мая 2019

Предположим, у меня есть прикрепленное свойство "Attached.Template" типа DataTemplate в пространстве имен ns, которое я хочу установить на свой UserControl через XAML. Есть ли синтаксис, который позволяет мне сделать это? Вот некоторые вещи, которые не работают:

<!-- fails; UserControl may have only one child -->
<UserControl>
   <ns:Attached.Template>
      <DataTemplate />
   </ns:Attached.Template>

   <Grid />
</UserControl>

<!-- fails; the '(' character cannot be included in a name -->
<UserControl>
   <UserControl.(ns:Attached.Template)>
      <DataTemplate />
   </UserControl.(ns:Attached.Template)>

   <Grid />
</UserControl>

<!-- fails; "UserControl.ns" is an undeclared prefix -->
<UserControl>
   <UserControl.ns:Attached.Template>
      <DataTemplate />
   </UserControl.ns:Attached.Template>

   <Grid />
</UserControl>

Определение свойства очень стандартное; просто следуя встроенному шаблону R #:

public static class Attached
{
    public static readonly DependencyProperty TemplateProperty = DependencyProperty.RegisterAttached(
        "Template", typeof(DataTemplate), typeof(Attached),
        new PropertyMetadata(default(DataTemplate)));

    public static void SetTemplate(DependencyObject element, DataTemplate value) =>
        element.SetValue(TemplateProperty, value);

    public static DataTemplate GetTemplate(DependencyObject element) =>
        (DataTemplate) element.GetValue(TemplateProperty);
}

Ответы [ 2 ]

2 голосов
/ 08 мая 2019

Кажется, вам необходимо явно установить Content UserControl следующим образом:

<UserControl>
    <ns:Attached.Template>
        <DataTemplate/>
    </ns:Attached.Template>

    <UserControl.Content>
        <Grid/>
    </UserControl.Content>
</UserControl>

Это также работает:

<UserControl>
    <Grid/>

    <ns:Attached.Template>
        <DataTemplate/>
    </ns:Attached.Template>
</UserControl>

IMO - странная ошибка или несовершенство в анализаторе XAML.

0 голосов
/ 08 мая 2019

Создайте свой DataTemplate в UserControl.Resources, а затем присвойте ему Key, затем, используя namespace:attatchedproperty={StaticResource Key}, вы сможете достичь того, о чем я думаю, вы спрашиваете.

...