2012-05-09 55 views
0

我嘗試了幾乎所有我在谷歌上找到的東西。但沒有任何工作。WPF綁定到字段

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

那麼,爲什麼不這項工作? 我也嘗試了很多其他解決方案,但沒有任何工作。

回答

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

當您使用ElementName=Led,你」重新告訴WPF尋找名爲Led的元素,但是您尚未聲明具有該名稱的元素。

KDiTraglia的回答是去正確的方式,但對於用戶控件也將工作設置了一個名字:

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

我不認爲用戶控件可以有相同的名字,因爲它的類。 – mdm20

+0

@ mdm20我其實從來沒有嘗試過,但顯然可以使用任何其他名稱。 –