Редактирование привязки шаблона в шаблонах управления - PullRequest
0 голосов
/ 07 ноября 2018

Я создал ControlTemplate, как это:

<ControlTemplate x:Key="FieldTemplate" TargetType="ContentControl">
  <Border Background="LightGray" >
    <DockPanel >
      <TextBlock DockPanel.Dock="Left" Text="{TemplateBinding c1}" />
      <TextBlock DockPanel.Dock="Left" Text="{TemplateBinding c2}" />
      <TextBox />
    </DockPanel>
  </Border>
</ControlTemplate>

и теперь я хочу иметь возможность редактировать оба текстовых блока, как мне это сделать? Я пробовал что-то подобное и другие варианты, но это не сработало:

<ContentControl c1="hello" c2="olleh" 
       Template="{StaticResource FieldTemplate}" x:Name="NameControl"/>

1 Ответ

0 голосов
/ 07 ноября 2018

A ContentControl не имеет свойств c1 и c2. Если вы создадите пользовательский элемент управления и определите их как свойства зависимостей, он будет работать:

public class MyControl : ContentControl
{
    public string C1
    {
        get { return (string)GetValue(C1Property); }
        set { SetValue(C1Property, value); }
    }
    public static readonly DependencyProperty C1Property = DependencyProperty.Register(nameof(C1), typeof(string), typeof(MyControl));

    public string C2
    {
        get { return (string)GetValue(C2Property); }
        set { SetValue(C2Property, value); }
    }
    public static readonly DependencyProperty C2Property = DependencyProperty.Register(nameof(C2), typeof(string), typeof(MyControl));
}

XAML:

<ControlTemplate x:Key="FieldTemplate" TargetType="local:MyControl">
    <Border Background="LightGray" >
        <DockPanel >
            <TextBlock DockPanel.Dock="Left" Text="{TemplateBinding C1}" />
            <TextBlock DockPanel.Dock="Left" Text="{TemplateBinding C2}" />
            <TextBox />
        </DockPanel>
    </Border>
</ControlTemplate>
...
<local:MyControl C1="hello" C2="olleh" Template="{StaticResource FieldTemplate}" x:Name="NameControl"/>
...