SetCurrentValue myLabel.BackgroundProperty不破坏绑定

zai*_*man 3 c# wpf xaml binding

我有三个文本框和一个标签.Label使用Multiconverter绑定到文本框中的文本.

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"/>
Run Code Online (Sandbox Code Playgroud)

变流器

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)};

    }
    }
Run Code Online (Sandbox Code Playgroud)

(显然,在现实世界中我会添加验证和类型检查).

现在我想添加一个设置标签背景的按钮,这样简单:

    lbl.Background= new SolidColorBrush(Color.FromRgb(
System.Convert.ToByte(121), 
System.Convert.ToByte(43), 
System.Convert.ToByte(15)));
Run Code Online (Sandbox Code Playgroud)

显然,它打破了约束力.所以我尝试:

    SetCurrentValue(lbl.BackgroundProperty, 
new SolidColorBrush(
Color.FromRgb(System.Convert.ToByte(121), 
System.Convert.ToByte(43), 
System.Convert.ToByte(15))));
Run Code Online (Sandbox Code Playgroud)

但VS抱怨说

无法使用实例引用访问成员'System.Windows.Controls.Control.BackgroundProperty'; 用类型名称来限定它

如何在不破坏绑定的情况下在代码中设置标签背景的值?

注意:这是WPF,.Net 4.5

TYY*_*TYY 7

错误是自我解释的,它告诉你lbl.BackgroundProperty不能这样设置.以下是正确的方法.

        lbl.SetCurrentValue(BackgroundProperty,
                                   new SolidColorBrush(Color.FromRgb(System.Convert.ToByte(121),
                                                                     System.Convert.ToByte(43),
                                                                     System.Convert.ToByte(15))));
Run Code Online (Sandbox Code Playgroud)