0

を使用するのは初めて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クラスは、System.Windows.Controls.Control 名前空間にある .NET クラスです。

ありがとう、

アダム

4

2 に答える 2

1

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.TextプロパティはContentControl.Contentからすべてを受け入れるわけではないので、 TextBlock から Label に変更したことに注意してください。意図したとおりに機能する例を次に示します。

<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>
于 2009-08-21T14:59:00.270 に答える
0

オブジェクトに INotifyPropertyChanged インターフェイスを実装し、コレクションに INotifyCollectionChanged を実装する必要がある場合があります。

于 2009-08-21T14:39:46.557 に答える