通常、オブジェクトを直接バインドすることはできません。ほとんどの UI オブジェクトがそれを期待しているため、(単色の場合)Color
を使用する必要があります。SolidColorBrush
例えば
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);
}
}
}