Der folgende Code bindet eine GradientStop
an die Background.Color
-Eigenschaft von TemplatedParent
. Alles funktioniert, aber ich bin einen verbindlichen Fehler im Ausgabefenster bekommen:Binding GradientStop funktioniert, meldet aber Fehler
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=Background.Color; DataItem=null; target element is 'GradientStop' (HashCode=6944299); target property is 'Color' (type 'Color')
<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>
Warum binden Sie nicht den Hintergrund selbst und die Farbe im Verlauf? –
Die BorderBrushis ist auch an die Farbe (fest) gebunden, also möchte ich die Farbe nur einmal einstellen und den Gradienten die gleiche Farbe für Gradientstop verwenden. (Und ich möchte auch wissen, warum ich einen Fehler erhalte, wenn es funktioniert) – McCrille