我尝试将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中使属性可见和可用需要什么?
答案 0 :(得分:0)
您不应该注册这样的附加属性,拥有类不您想要设置属性的任何控件( - 您可以将设置为,无论什么 - )但是定义属性的类。因此,将typeof(ItemsControl)
更改为typeof(WhatEverTheSurroundingClassIs)
。
同样,您需要使用类的名称空间的名称空间映射以及类名来定位XAML中的属性:
Property="local:WhatEverTheSurroundingClassIs.Position"