TemplateBinding не работает с объектами .NET Framework - PullRequest
0 голосов
/ 21 августа 2009

Я новичок в использовании ControlTemplate. Я пишу свой первый элемент управления, но у меня возникла (как мне кажется) очень странная проблема.

Любые свойства зависимостей, которые я заставляю TemplateBinding работать, но любые свойства из объектов инфраструктуры .NET, например, свойство Content ContentControl или Items свойства ItemsControl, не заполняются во время выполнения.

Я уверен, что что-то упустил ... Что я не знаю ...

Пример кода приведен ниже:

На данный момент класс очень прост:

public class Title : ContentControl
{
}

А вот шаблон:

<Style TargetType="{x:Type UI:Title}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type UI:Title}">
                <TextBlock Text="{TemplateBinding Content}" />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Базовый класс ContentControl - это класс .NET, расположенный в пространстве имен System.Windows.Controls.Control.

Спасибо

Адам

Ответы [ 2 ]

1 голос
/ 21 августа 2009

Полагаю, если вы хотите переопределить расположение Content , вы можете сделать это, используя ContentPresenter .

<Style TargetType="{x:Type UI:Title}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type UI:Title}">
                <Label>
                    <ContentPresenter />
                </Label>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Примечание. Я также изменил значение с TextBlock на Label, так как считаю, что свойство TextBlock.Text не будет принимать все, начиная с ContentControl.Content . Вот пример, который я собрал, который работает как задумано:

<Window x:Class="ContentControlTest.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:ContentControlTest"
        Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <Style TargetType="{x:Type local:Title}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type local:Title}">
                        <Button>
                            <ContentPresenter />
                        </Button>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>
    <local:Title>
        <TextBlock Text="Happy Days!" />
    </local:Title>
</Window>
0 голосов
/ 21 августа 2009

Возможно, вам потребуется реализовать интерфейс INotifyPropertyChanged для ваших объектов и INotifyCollectionChanged для ваших коллекций.

...