在上一个问题中,kbmax告诉我如何在generic.xaml中绑定自定义属性。这个回答是Setting Border background with a template binding
在我尝试使用LinearGradientBrush StartPoint执行此操作之前,它工作得很好,这是一个示例:
这显然很好用:
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
我想将它们绑定到这样的自定义属性: 这不起作用,无论我将属性设置为什么,我总是得到一个从左到右的渐变。
<LinearGradientBrush StartPoint="{Binding HeaderBorderGradientStartPoint, RelativeSource={RelativeSource TemplatedParent}}" EndPoint="{Binding HeaderBorderGradientEndPoint, RelativeSource={RelativeSource TemplatedParent}}">
以下是该类中的代码。
public static readonly DependencyProperty HeaderBorderGradientStartPointProperty =
DependencyProperty.Register("HeaderBorderGradientStartPoint", typeof(Point), typeof(GalleryExpander), new PropertyMetadata(new Point(0.5,0)));
public Point HeaderBorderGradientStartPoint {
get { return (Point)GetValue(HeaderBorderGradientStartPointProperty); }
set { SetValue(HeaderBorderGradientStartPointProperty, value); }
}
public static readonly DependencyProperty HeaderBorderGradientEndPointProperty =
DependencyProperty.Register("HeaderBorderGradientEndPoint", typeof(Point), typeof(GalleryExpander), new PropertyMetadata(new Point(0.5,1)));
public Point HeaderBorderGradientEndPoint {
get { return (Point)GetValue(HeaderBorderGradientEndPointProperty); }
set { SetValue(HeaderBorderGradientEndPointProperty, value); }
}
<Border.BorderBrush>
<LinearGradientBrush StartPoint="{Binding HeaderBorderGradientStartPoint, RelativeSource={RelativeSource TemplatedParent}}" EndPoint="{Binding HeaderBorderGradientEndPoint, RelativeSource={RelativeSource TemplatedParent}}">
<LinearGradientBrush.GradientStops>
<GradientStop Offset="0.0" Color="Transparent" />
<GradientStop Offset="0.25" Color="Transparent" />
<GradientStop Offset="0.50" Color="Transparent" />
<GradientStop Offset="0.75" Color="Transparent" />
<GradientStop Offset="1.0" Color="Transparent" />
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Border.BorderBrush>
感谢任何方向......
答案 0 :(得分:2)
嗯,我创建了一个小的自定义控件来检查它,它工作得很好。我的控件看起来像这样:
public class MyGradientControl : Control
{
public static readonly DependencyProperty StartPointDProperty =
DependencyProperty.Register("StartPointD", typeof (Point),
typeof (MyGradientControl), new PropertyMetadata(new Point(0.5, 0.5)));
static MyGradientControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof (MyGradientControl),
new FrameworkPropertyMetadata(typeof (MyGradientControl)));
}
public Point StartPointD
{
get { return (Point) GetValue(StartPointDProperty); }
set { SetValue(StartPointDProperty, value); }
}
}
并具有以下样式(在Themes \ generic.xaml中):
<Style TargetType="{x:Type local:MyGradientControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MyGradientControl}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Grid VerticalAlignment="Stretch"
HorizontalAlignment="Stretch">
<Grid.Background>
<LinearGradientBrush
StartPoint="{Binding StartPointD,
RelativeSource={RelativeSource
TemplatedParent}}"
EndPoint="0, 0">
<GradientStop Color="Red" Offset="0"/>
<GradientStop Color="White" Offset="1"/>
</LinearGradientBrush>
</Grid.Background>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
您是否为LinearGradientBrush提供了GradientStops?他们有抵消吗?