我正在创建一个自定义控件库,我开始使用一个简单的圆边分隔符,但有些东西我似乎无法做到。
我有一个CornerRadius依赖属性,如果没有定义CornerRadius,我希望CornerRadius等于Height / 2,否则取用户值。我在构造函数中初始化高度,使其永远不为空
我知道如何为依赖项属性定义默认值,但我不知道如何,或者是否可以根据控件的高度设置CornerRadius值。到目前为止,我已经搜索了一段时间。
Xaml文件
<!-- Rounded Separator -->
<Style TargetType="{x:Type local:RoundedSeparator}" BasedOn="{StaticResource {x:Type Separator}}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:RoundedSeparator}">
<!-- Mask for round edges -->
<Grid Height="{TemplateBinding Height}"
Width="{TemplateBinding Width}">
<Border Name="PART_TitleBarMask"
CornerRadius="{TemplateBinding CornerRadius}"
Background="White"/>
<Grid>
<Grid.OpacityMask>
<VisualBrush Visual="{Binding ElementName=PART_TitleBarMask}"/>
</Grid.OpacityMask>
<!-- Separator -->
<Rectangle Fill="{TemplateBinding Background}"/>
</Grid>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
.cs文件
public class RoundedSeparator : Separator
{
static RoundedSeparator()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(RoundedSeparator), new FrameworkPropertyMetadata(typeof(RoundedSeparator)));
}
public RoundedSeparator()
{
this.Height = 100;
this.Background = Brushes.Black;
}
public static readonly DependencyProperty CornerRadiusProperty =
DependencyProperty.Register("CornerRadius",
typeof(CornerRadius),
typeof(RoundedSeparator),
new UIPropertyMetadata(default(CornerRadius));
public CornerRadius CornerRadius
{
get { return (CornerRadius)GetValue(CornerRadiusProperty); }
set { SetValue(CornerRadiusProperty, value); }
}
}
答案 0 :(得分:0)
尝试:
static RoundedSeparator()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(RoundedSeparator), new FrameworkPropertyMetadata(typeof(RoundedSeparator)));
RoundedSeparator.HeightProperty.OverrideMetadata
(typeof(RoundedSeparator), new FrameworkPropertyMetadata(new PropertyChangedCallback(HeightPropertyChanged)));
}
private static void HeightPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
// Do what you will .... :)
}