WPF绑定到字段

时间:2012-05-09 20:52:34

标签: wpf binding

我几乎尝试了在谷歌上找到的所有内容。但没有任何作用。

我有这个Xaml:

<UserControl x:Class="Controller.General.Led"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<Grid>
    <Ellipse Name="ellipse" Fill="{Binding ElementName=Led, Path=backColor}" Stroke="Black" StrokeThickness="3">

    </Ellipse>
</Grid>

此代码:

public partial class Led : UserControl
{
    public Brush backColor = Brushes.Red;

    public Led()
    {
        InitializeComponent();
    }
}

那么为什么这不起作用? 我也尝试了很多其他解决方案,但没有任何工作。

2 个答案:

答案 0 :(得分:3)

这里有一些错误,首先你不能只将ElementName设置为一个类。解决此问题的一种快速简便方法是将用户控件的数据上下文设置为自身,因为它似乎是您要绑定的属性所在的位置。同时将公共变量更改为 PROPERTY (绑定不起作用!)

public partial class Led : UserControl 
{ 
    public Brush backColor{get; set;}

    public Led()
    {
        InitializeComponent();
        this.DataContext = this;
        backColor = Brushes.Red;
    }
}

接下来只需更改您的xaml即可阅读......

<Ellipse 
   Name="ellipse" 
   Fill="{Binding backColor}" 
   Stroke="Black" 
   StrokeThickness="3"
   />

答案 1 :(得分:1)

使用ElementName=Led时,您告诉WPF查找名为Led的元素,但是您没有声明具有该名称的元素。

KDiTraglia的答案是正确的方法,但为用户控件设置名称也可以:

<UserControl x:Name="Led" ...>
    ....
</UserControl>