В моем приложении есть цветные ресурсы. У меня есть один элемент, который использует этот цвет как динамический ресурс в xaml.
<Window x:Class="ResourcePlay.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="425">
<Window.Resources>
<Color x:Key="MyColor">Red</Color>
</Window.Resources>
<Grid>
<Rectangle VerticalAlignment="Top" Width="80" Height="80" Margin="10">
<Rectangle.Fill>
<SolidColorBrush x:Name="TopBrush" Color="{DynamicResource MyColor}"/>
</Rectangle.Fill>
</Rectangle>
<Rectangle VerticalAlignment="Bottom" Width="80" Height="80" Margin="10">
<Rectangle.Fill>
<SolidColorBrush x:Name="BottomBrush"/>
</Rectangle.Fill>
</Rectangle>
</Grid>
</Window>
В коде я хочу продублировать эту ссылку на ресурс.
using System.Windows;
using System.Windows.Media;
namespace ResourcePlay {
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
// I want to copy the resource reference, not the color.
BottomBrush.Color = TopBrush.Color;
// I'd really rather do something like this.
var reference = TopBrush.GetResourceReference(SolidColorBrush.ColorProperty);
BottomBrush.SetResourceReference(reference);
// I want this to change the colors of both elements
Resources["MyColor"] = Colors.Green;
}
}
}
Однако SetResourceReference работает только для FrameworkElements или FrameworkContentElements. SolidColorBrush - это просто Freezable. Кроме того, я понятия не имею, как получить ссылку на ресурс в исходном коде.
Есть ли способ сделать это в WPF, чтобы оба цвета менялись одновременно? В моем реальном приложении проблема не так проста, поэтому я не могу просто добавить второй DynamicResource в xaml.
SolidColorBrush
как ресурс, а затем используете его для свойствFill
тех элементов, где вы этого хотите. - person Peter Duniho   schedule 31.01.2015