0

我已经尝试了几乎所有在谷歌上找到的东西。但没有任何效果。

我有这个 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();
    }
}

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

4

2 回答 2

3

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

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"
   />
于 2012-05-09T21:07:09.837 回答
1

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

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

<UserControl x:Name="Led" ...>
    ....
</UserControl>
于 2012-05-09T21:40:10.317 回答