3つのテキストボックスと1つのラベルがあります。ラベルは、マルチコンバーターを使用してテキストボックス内のテキストにバインドされます。
XAML:
<Label Name="lbl" Content="Label" HorizontalAlignment="Left" Margin="336,128,0,0" VerticalAlignment="Top" Height="57" Width="93">
<Label.Background>
<MultiBinding Converter="{StaticResource converta}">
<Binding ElementName="R" Path="Text" Mode="TwoWay" />
<Binding ElementName="G" Path="Text" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay" />
<Binding ElementName="B" Path="Text" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay" />
</MultiBinding>
</Label.Background>
</Label>
<TextBox Name="R" HorizontalAlignment="Left" Height="23" Margin="250,214,0,0" TextWrapping="Wrap" Text="255" VerticalAlignment="Top" Width="120"/>
<TextBox Name="B" HorizontalAlignment="Left" Height="23" Margin="271,242,0,0" TextWrapping="Wrap" Text="255" VerticalAlignment="Top" Width="120"/>
<TextBox Name="G" HorizontalAlignment="Left" Height="23" Margin="155,275,0,0" TextWrapping="Wrap" Text="255" VerticalAlignment="Top" Width="120"/>
コンバータ
class converter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return new System.Windows.Media.SolidColorBrush(Color.FromRgb(System.Convert.ToByte((values[0] as string)), System.Convert.ToByte((values[1] as string)), System.Convert.ToByte((values[2] as string))));
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
byte R = (value as System.Windows.Media.Color?).Value.R;
byte G = (value as System.Windows.Media.Color?).Value.G;
byte B = (value as System.Windows.Media.Color?).Value.B;
return new string[] {System.Convert.ToString(R),System.Convert.ToString(G),System.Convert.ToString(B)};
}
}
(明らかに、現実の世界では、検証と型チェックを追加します)。
次に、ラベルの背景を設定するボタンを追加します。これは次のような単純なものです。
lbl.Background= new SolidColorBrush(Color.FromRgb(
System.Convert.ToByte(121),
System.Convert.ToByte(43),
System.Convert.ToByte(15)));
明らかに、それはバインディングを壊します。だから私は試してみます:
SetCurrentValue(lbl.BackgroundProperty,
new SolidColorBrush(
Color.FromRgb(System.Convert.ToByte(121),
System.Convert.ToByte(43),
System.Convert.ToByte(15))));
しかし、VSはそれを不平を言います
メンバー'System.Windows.Controls.Control.BackgroundProperty'には、インスタンス参照を使用してアクセスできません。代わりにタイプ名で修飾してください
バインディングを壊さずにコードでラベルの背景の値を設定するにはどうすればよいですか?
注:これはWPF、.Net4.5です。