<Window x:Class="Project.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="100" Height="400">
<Window.Resources>
<Style x:Key="IconStyle" TargetType="{x:Type Image}">
<Setter Property="Source">
<Setter.Value>
<DrawingImage>
<DrawingImage.Drawing>
<GeometryDrawing Brush="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContentControl}}, Path=Foreground}">
<GeometryDrawing.Geometry>
<PathGeometry Figures="M 0,0 0,10 10,5" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingImage.Drawing>
</DrawingImage>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<StackPanel>
<ContentControl Foreground="Red">
<Image Style="{StaticResource IconStyle}" />
</ContentControl>
<ContentControl Foreground="Blue">
<Image Style="{StaticResource IconStyle}" />
</ContentControl>
</StackPanel>
</Window>
В этом примере показаны две иконки. Значки имеют цвет родительского ContentControl. Он работает нормально.Ошибка привязки в стиле DrawingImage
Но выход показывает ошибку связывания:
System.Windows.Data Ошибка: 4: Не удается найти источник для связывания со ссылкой 'RelativeSource FindAncestor, AncestorType =' System.Windows.Controls.ContentControl», AncestorLevel = '1'». BindingExpression: Path = передний план; DataItem = NULL; целевым элементом является «GeometryDrawing» (HashCode = 8154127); целевым свойством является «Brush» (тип «Brush»)
Зачем возникает эта ошибка? Как я могу это исправить или я могу игнорировать?
EDIT
Ошибка возникает и в этом случае:
<Window x:Class="Project.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="100" Height="400">
<Window.Resources>
<Style x:Key="IconStyle" TargetType="{x:Type ContentControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ContentControl">
<Image>
<Image.Source>
<DrawingImage>
<DrawingImage.Drawing>
<GeometryDrawing Brush="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContentControl}}, Path=Foreground}">
<GeometryDrawing.Geometry>
<PathGeometry Figures="M 0,0 0,10 10,5" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingImage.Drawing>
</DrawingImage>
</Image.Source>
</Image>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<StackPanel>
<ContentControl Foreground="Red" Style="{StaticResource IconStyle}" />
<ContentControl Foreground="Blue" Style="{StaticResource IconStyle}" />
</StackPanel>
</Window>
У вас есть несколько ContentControls, это может вызвать проблемы с RelativeSource связывания (даже если он работал), вы пробовали используя вместо этого привязку ElementName? –
Ошибка возникает также, если я использую привязку ElementName или если я удалю один из двух ContentControls. – Pearson
Это довольно странно, я имею в виду, что это действительно работает, но это все равно порождает ошибку. Было бы заманчиво проигнорировать это, однако должна быть какая-то причина, почему это порождает ошибку. Правда, я не знаю. –