【发布时间】:2010-10-07 14:37:21
【问题描述】:
以下代码将GradientStop 绑定到TemplatedParent 的Background.Color 属性。一切正常,但我在输出窗口中遇到绑定错误:
System.Windows.Data 错误:2:找不到目标元素的管理 FrameworkElement 或 FrameworkContentElement。 BindingExpression:Path=Background.Color;数据项=空;目标元素是 'GradientStop' (HashCode=6944299);目标属性是“颜色”(输入“颜色”)
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="WpfBindingTest.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="100" Height="100">
<Window.Resources>
<ControlTemplate x:Key="GradientTemplate" TargetType="{x:Type ContentControl}">
<Border BorderThickness="1" BorderBrush="{TemplateBinding Background}">
<Border.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="{Binding Path=Background.Color,
RelativeSource={RelativeSource TemplatedParent}}" Offset="1"/>
<GradientStop Color="White" Offset="0"/>
</LinearGradientBrush>
</Border.Background>
<ContentPresenter/>
</Border>
</ControlTemplate>
</Window.Resources>
<Grid x:Name="LayoutRoot">
<ContentControl Background="Green" Template="{StaticResource GradientTemplate}" >
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Text="X" />
</ContentControl>
</Grid>
</Window>
【问题讨论】:
-
为什么不绑定背景本身,而不是渐变中的特定颜色?
-
BorderBrushs 也绑定到颜色(纯色),所以我只想设置一次颜色,并让渐变使用相同的颜色作为渐变停止。 (而且我也想知道为什么我在运行时会出错)