使用数据绑定将颜色(作为字符串)传递给按钮的背景

时间:2013-02-22 01:22:38

标签: c# wpf button binding background

在下面的代码片段中,我尝试将颜色(作为字符串)传递给控件并使用绑定为按钮的背景指定颜色。但是,它被忽略了。知道出了什么问题吗?

这是XAML:

<Window x:Class="SDKSample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:SDKSample"
        Title="MainWindow" Height="350" Width="525">

    <DockPanel>
        <DockPanel.Resources>
            <local:MyData x:Key="myDataSource"   />
        </DockPanel.Resources>
        <DockPanel.DataContext>
            <Binding Source="{StaticResource myDataSource}" />
        </DockPanel.DataContext>
        <!--<Button Background="Red" Width="250" Height="25">RED</Button>-->
        <Button Background="{Binding Source={StaticResource myDataSource}, Path=ColorName}" Width="150" Height="30">I'm bound to be red</Button>

    </DockPanel>        
</Window>

这是背后的代码:

namespace SDKSample
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            MyData md = new MyData("Red");
            this.DataContext = md.ColorName;

        }
    }

    public class MyData
    {
        private Color colorname;
        public MyData()
        {
        }

        public MyData(string value)
        {
            Color col = (Color)ColorConverter.ConvertFromString(value);
            this.colorname = col;
        }

        public Color ColorName
        {
            get { return colorname; }
            set
            {
                this.colorname = value;
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

这里有几个问题,第一个很常见,很多人尝试将Color分配给Brush,你不能直接这样做,一个方法是将color分配给SolidColorbrush的{​​{1}}。

示例:

Background

另一个问题是您分配<Button Content="I'm bound to be red" Width="150" Height="30"> <Button.Background> <SolidColorBrush Color="{Binding ElementName=UI,Path=MyData.ColorName}" /> </Button.Background> </Button> 的方式,您真正需要做的就是在您的窗口上设置DataContext属性并将其分配给您的MyData

这是一个例子。

的Xaml:

Button

代码

<Window x:Class="WpfApplication7.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="124" Width="464" Name="UI" >

        <DockPanel DataContext="{Binding ElementName=UI}"> <!--set the DataContext to your Window (using the Name of the Window)-->
            <Button Content="I'm bound to be red" Width="150" Height="30">
                <Button.Background>
                    <SolidColorBrush Color="{Binding MyData.ColorName}" />
                </Button.Background>
            </Button>
        </DockPanel>
</Window>