您通常不能直接绑定Color
对象,您需要使用 a SolidColorBrush
(用于纯色),因为这是大多数 UI 对象所期望的。
例如
TextBox.Background
期望Brush
,它SolidColorBrush
是的子类。还有其他类型的刷子可以产生不同的填充,例如LinearGradientBrush
看看这里:
如何在 WPF/XAML 中绑定背景颜色?
您能否提供一些您所期望的和 XAML 的屏幕截图?
编辑:
好吧,你想要的很容易实现,与 Caliburn.Micro 完全没有关系:)
像往常一样创建你的样式,但是Color
使用动态绑定画笔属性DynamicResource
。当您更新颜色本身时,将再次评估资源绑定并且颜色将发生变化。
示例 XAML:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Color x:Key="TestColor" A="255" R="255" G="0" B="0"></Color>
<Style x:Key="ButtonStyle" TargetType="Button">
<Setter Property="Background">
<Setter.Value>
<SolidColorBrush Color="{DynamicResource TestColor}"></SolidColorBrush>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<StackPanel>
<Button Click="Button_Click" Style="{StaticResource ButtonStyle}">Red</Button>
<Button Click="Button_Click_1" Style="{StaticResource ButtonStyle}">Blue</Button>
</StackPanel>
</Grid>
</Window>
代码隐藏:
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Resources["TestColor"] = Color.FromArgb(255, 255, 0, 0);
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
Resources["TestColor"] = Color.FromArgb(255, 0, 0, 255);
}
}
}