0

ItemsControl.AlternationIndexのように、プロパティをアタッチしようとしていItemsControlます。以下のように使用すると、ビルド時に「テンプレート プロパティが見つかりません」というエラーが発生します。添付プロパティは正常にAlternationIndex機能します。

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TabItem}">
                    <Grid SnapsToDevicePixels="true">
                        <Border x:Name="Bd" ... >
                            <ContentPresenter x:Name="Content" ... />
                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="ItemsControl.Position" 
                                 Value="Last">
                            <Setter Property="CornerRadius" 
                                    TargetName="Bd" 
                                    Value="0,0,0,4"/>
                        </Trigger>
                        <Trigger Property="ItemsControl.AlternationIndex" 
                                 Value="0">
                            <Setter Property="CornerRadius" 
                                    TargetName="Bd" 
                                    Value="4,0,0,0"/>
                        </Trigger>
                        ...
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>

プロパティのコードは、テンプレート セッターを保持する同じ WPF コントロールの分離コードに配置されます。

    public enum Position
    {
        First,
        Normal,
        Last
    }

    private static readonly DependencyPropertyKey PositionPropertyKey =
       DependencyProperty.RegisterAttachedReadOnly(
            "Position",
            typeof(Position),
            typeof(ItemsControl),
            new FrameworkPropertyMetadata(Position.Normal,
                 FrameworkPropertyMetadataOptions.Inherits));

    public static readonly DependencyProperty PositionProperty =
        PositionPropertyKey.DependencyProperty;

    public static Position GetPosition(DependencyObject element)
    {
        if (element == null)
            throw new ArgumentNullException("element");

        var result = element.GetValue(PositionProperty);

        return (Position)result;
    }

    internal static void SetPosition(DependencyObject d, Position value)
    {
        d.SetValue(PositionPropertyKey, value);
    }

    internal static void ClearPosition(DependencyObject d)
    {
        d.ClearValue(PositionPropertyKey);
    }

XAML でプロパティを表示して使用できるようにするには何が必要ですか?

4

1 に答える 1

0

そのような添付プロパティを登録しないでください。所有クラスは、プロパティを設定する予定のコントロールではありません(-何があってもどこにでも設定できます-)が、プロパティが定義されているクラスです。を に変更typeof(ItemsControl)typeof(WhatEverTheSurroundingClassIs)ます。

同様に、クラス名と組み合わせて、クラスの名前空間の名前空間マッピングを使用して、XAML でプロパティをターゲットにする必要があります。

Property="local:WhatEverTheSurroundingClassIs.Position"
于 2012-04-23T10:00:24.293 に答える