Ответ HB очень интересен, и я немного поиграл с ним, так как хочу сделать именно то, о чем просит этот вопрос.
Что я заметил, так это то, что использование DynamicResource не 't работает для WPF 3.5.То есть, он генерирует исключение во время выполнения (тот, о котором говорит Аменти).Однако , если вы создаете цвета, которые ссылаются на цвет, которым вы хотите поделиться ... StaticResource, он работает как на WPF 3.5, так и на WPF 4.0.
То есть этот xaml работает дляWPF 3.5 и WPF 4.0:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ColorsReferencingColors.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640"
Height="480"
>
<Window.Resources>
<Color x:Key="DarkBlue">DarkBlue</Color>
<StaticResource x:Key="EllipseBackgroundColor" ResourceKey="DarkBlue"/>
<SolidColorBrush
x:Key="ellipseFillBrush"
Color="{DynamicResource EllipseBackgroundColor}"
/>
</Window.Resources>
<Grid>
<StackPanel Margin="25">
<Ellipse
Width="200"
Height="200"
Fill="{DynamicResource ellipseFillBrush}"
/>
</StackPanel>
</Grid>
</Window>
Еще одна вещь, о которой стоит упомянуть (опять же), это то, что этот подход наносит ущерб дизайнерам (то есть дизайнерам Visual Studio 2008 и 2010, Blend 3 и 4).дизайнеры).Я полагаю, что это та же самая причина, по которой Kaxaml 1.7 не понравился xaml HB (если вы следите за потоком комментариев по ответу HB).
Но хотя это нарушает конструкторы для простого тестового примера, этопохоже, не нарушает дизайн для крупномасштабного приложения, над которым я работаю в своей повседневной работе.Просто странно!Другими словами, если вы заботитесь о вещах, которые все еще работают в конструкторе, попробуйте этот метод в любом случае ... ваш дизайнер все еще может работать!