2012-04-23 2 views
0

ItemsControlItemsControl.AlternationIndexのようにプロパティをアタッチしようとしています。 このように使用すると、ビルド時に「テンプレートプロパティが見つかりません」というエラーが発生します。 添付プロパティー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でプロパティを表示および使用できるようにするためには何が必要ですか?

答えて

0

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

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

Property="local:WhatEverTheSurroundingClassIs.Position" 
関連する問題