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