XAML: привязка к свойству пользовательского элемента управления из шаблона - PullRequest
0 голосов
/ 30 марта 2020

в моем приложении WPF у меня есть пользовательский элемент управления с объектом зависимости

public static readonly DependencyProperty SomeFieldProperty =
            DependencyProperty.Register("SomeField", typeof(double), typeof(MyControl), new PropertyMetadata((double)0, OnPropChanged));

public double SomeField
{
    get { return (double)GetValue(SomeFieldProperty ); }
    set { SetValue(SomeFieldProperty , value); }
}

И из моего XAML я пытаюсь привязать SomeField, как показано ниже, но он не работает: ОБНОВЛЕНО :

<UserControl.Template>
    <ControlTemplate TargetType="ContentControl">
        <WrapPannel >
            <abc:MyControl SomeField="{Binding SomeValue, Mode=TwoWay}" />
        </WrapPannel>
    </ControlTemplate>
</UserControl.Template>

Пробовал различные решения, предложенные в подобных вопросах в StackOverflow, но ни одно из них не сработало. Может быть, мой случай специфичен c, поскольку я пытаюсь выполнить привязку из шаблона?

1 Ответ

0 голосов
/ 30 марта 2020

Похоже, это не является обязательной проблемой. На самом деле свойство Template элемента UserControl переопределяется с помощью InitializeComponent (). Примерно так будет работать:

<UserControl x:Class="WPF.MyUserControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:WPF"
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800">
    <WrapPannel>
        <abc:MyControl SomeField="{Binding SomeValue, Mode=TwoWay}" />
    </WrapPannel>
</UserControl>

На самом деле UserControls должны использоваться, когда шаблоны не нужны. В противном случае используйте Controls, ContentControls или ItemsControls.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...