Краткое описание моей проблемы: я создал UserControl
, где я связал свое свойство зависимости "Scheme" со свойством Color GradientStop
, и оно работало отлично. Теперь, после преобразования моего UserControl
в пользовательский элемент управления, эта привязка больше не работает, и я не знаю почему.
Так я объявил свои словари ресурсов для моего UserControl в файле UserControl1.xaml
.
В UserControl1.xaml
:
<!-- Resources -->
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Colors.xaml"/>
<ResourceDictionary Source="Styles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
В Colors.xaml
у меня есть следующее:
В Colors.xaml
:
<GradientStopCollection x:Key="colorSchemeGradient">
<GradientStop Color="{Binding Scheme, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" Offset="0"/>
<GradientStop Color="#000000" Offset="3"/>
</GradientStopCollection>
<LinearGradientBrush x:Key="colorBrush" StartPoint="0,0" EndPoint="0,1" GradientStops="{DynamicResource colorSchemeGradient}"/>
Свойство зависимости Привязка схемы к свойству цвета GradientStop
РАБОТАЕТ Отлично, именно так, как я хочу. LinearGradientBrush
использует цвет схемы для создания градиента, который переходит от цвета схемы к чуть более темному оттенку.
У UserControl
есть прямоугольник, который использует colorBrush в качестве фона. Все работает отлично, и мне это нравится.
Теперь обстоятельства заставляют меня конвертировать UserControl
в CustomControl
. Я делаю это, беря XAML-файл моего UserControl
и в значительной степени копирую все его содержимое в Generic.xaml
в шаблоне управления.
После того, как мы попробовали разные вещи, мне показалось, что это хорошо работает для объявления моих словарей ресурсов в Generic.xaml
:
В Generic.xaml
:
<Style TargetType="{x:Type local:MyCustomControl}">
<!-- Style Resources -->
<Style.Resources>
<!-- Resource Dictionaries -->
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/MyCustomControl;component/themes/Colors.xaml"/>
<ResourceDictionary Source="/MyCustomControl;component/themes/Styles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Style.Resources>
.
.
.
</Style>
Теперь в моем файле Colors.xaml
есть следующее:
В Colors.xaml
для моего пользовательского элемента управления:
<GradientStopCollection x:Key="colorSchemeGradient">
<GradientStop Color="{Binding Path=Scheme, RelativeSource={RelativeSource FindAncestor, AncestorType=l:MyCustomControl}}" Offset="0"/>
<GradientStop Color="#000000" Offset="3"/>
</GradientStopCollection>
<!-- FOR DEBUG PURPOSES -->
<TextBlock x:Key="whoaText" Text="{Binding Path=Title, RelativeSource={RelativeSource FindAncestor, AncestorType=l:MyCustomControl}}"/>
<LinearGradientBrush x:Key="colorBrush" StartPoint="0,0" EndPoint="0,1" GradientStops="{DynamicResource colorSchemeGradient}"/>
Теперь, по какой-то очень разочаровывающей причине, которую я не могу понять, привязка к GradientStop
больше не работает. Нет проблем в том, как я организовал свои ресурсы, потому что этот отладочный текстовый блок, который я сделал, отлично связывается со свойством зависимостей Title.
Цвет GradientStop
не привязывается к свойству зависимости Scheme, и это меня раздражает.
Как я могу это исправить?
В Dictionary1.xaml
посмотрите на текстовый блок с x:key "text2"
. ColorBrush использует градиентные остановки от colorSchemeGradient
, который использует привязку к схеме. Однако это связывание не выполняется, и поэтому ничего не работает. Если вы можете заставить эту привязку работать, вы потрясающие.
Почему привязка работает здесь, а не в пользовательском элементе управления?