Кажется, что это должно быть просто как p ie, но я не могу понять это.
Я пытаюсь изменить рабочий Style Setter для свойства "Fill" на элементе, чтобы фактически объявите объект SolidColorBrush
в XAML в Setter.Value
. К сожалению, в моем объявлении bru sh я не могу «добраться до» DataContext того самого объекта, чье заполнение я пытаюсь установить. Как я могу это сделать?
Ниже приведен стиль с сеттером. Он использует конвертер, который принимает значение перечисления («Использование») и возвращает значение цвета. Преобразователь в порядке, но привязка не выполняется, поскольку он не может найти объект.
<core:UsageToColorConverter x:Key="CvtUsageToColor"/>
<Style x:Key="RegionBandStyle"
TargetType="{x:Type tk:CartesianPlotBandAnnotation}">
<!-- Help Intellisense show us the correct bindings when coding -->
<d:Style.DataContext>
<x:Type Type="gci:IProfileRegion" />
</d:Style.DataContext>
<Setter Property="Fill">
<Setter.Value>
<SolidColorBrush >
<SolidColorBrush.Color>
<!-- THIS BINDING FAILS: It cannot find the "ancestor" CartesianPlotBandAnnotation
in order to get at its DataContext
-->
<Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type tk:CartesianPlotBandAnnotation}}"
Path="DataContext.(gci:IProfileRegion.Usage)"
Converter="{StaticResource CvtUsageToColor}"/>
</SolidColorBrush.Color>
</SolidColorBrush>
</Setter.Value>
</Setter>
</Style>
Привязка завершается с этим сообщением:
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='Telerik.Windows.Controls.ChartView.CartesianPlotBandAnnotation', AncestorLevel='1''. BindingExpression:Path=DataContext.Usage; DataItem=null; target element is 'SolidColorBrush' (HashCode=39731869); target property is 'Color' (type 'Color')
Полагаю, это имеет смысл. Мое смутное понимание, что Bru sh не в визуальном (или логическом) дереве, верно? Значит, он не может найти предка? Это причина?
Оригинальная версия этого Сеттера работала, но это было намного проще. Он просто использовал аналогичный конвертер, который возвращает SolidColorBrush
вместо цвета:
<Setter Property="Fill" Value="{Binding Usage, Converter={StaticResource CvtUsageToBrush}}"/>
Это работало нормально, но, к сожалению (по несвязанным причинам), мне нужно сделать что-то другое; Мне нужно самому объявить Bru sh, используя синтаксис элемента свойства
Может кто-нибудь сказать мне, какое связывание мне нужно здесь, чтобы получить DataContext CartesianPlotBandAnnotation
в моей SolidColorBrush
привязке цвета?
(Это проблема связывания, которая заставляет мою голову кружиться независимо от того, сколько раз я читаю на логическом и визуальном деревьях. В моих поисках постоянно появляются связанные темы, но не та, которую я хочу.)