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 でプロパティを表示して使用できるようにするには何が必要ですか?