0

我有DataContext="{Binding RelativeSource={RelativeSource self}}"定製控件屬性綁定失敗的Silverlight

自定義用戶控件在後面的代碼我做了一個依賴屬性,如:

public static DependencyProperty ElementNameProperty = DependencyProperty.Register("ElementName", 
     typeof(string), 
     typeof(ElementControl), 
     new PropertyMetadata(new PropertyChangedCallback((s, e) => { new Base().OnPropertyChanged("ElementName"); }))); 

    public string ElementName 
    { 
     get 
     { 
      return (string)base.GetValue(ElementNameProperty); 
     } 
     set 
     { 
      base.SetValue(ElementNameProperty, value); 

     } 
    } 

現在,當我嘗試使用此用戶控件我mainpage.xaml並使用以下綁定:<test.TestControl ElementName="{Binding name}" />,它會一直在我的自定義用戶控件中搜索'name'屬性,而不是它應該從哪裏來的?

我在做什麼錯?

回答

0

我最終通過這種方式解決了這個問題。不是我想要的方式,但它是(在我眼中)非常整潔的解決方案。

CustomUserControl.xaml

<UserControl x:Class="TestApp.Controls.CustomUserControl" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     mc:Ignorable="d" 
     Width="75" 
     Height="75"> 
    <Canvas x:Name="LayoutRoot" 
     Background="Black"> 
    <StackPanel Orientation="Vertical"> 
     <Image x:Name="UCImage" 
     Width="50" 
     Height="50" 
     HorizontalAlignment="Center" /> 
     <TextBlock x:Name="UCText" 
      HorizontalAlignment="Center" /> 
    </StackPanel> 
    </Canvas> 
</UserControl> 

CustomUserControl.xaml.cs

public partial class ElementControl : UserControl 
{ 
    #region DependencyProperty ElementNameProperty 
    public static DependencyProperty ElementNameProperty = DependencyProperty.Register("ElementName", 
     typeof(string), 
     typeof(ElementControl), 
     new PropertyMetadata(new PropertyChangedCallback((s, e) => 
    { 
    //See Here 
    ((ElementControl)s).UCText.Text = e.NewValue as string; 
    }))); 

    public string ElementName 
    { 
     get 
     { 
      return (string)base.GetValue(ElementNameProperty); 
     } 
     set 
     { 
      base.SetValue(ElementNameProperty, value); 
     } 
    } 
    #endregion 
} 
1

它在那裏搜索,因爲您的DataContext設置在用戶控件的最頂層。你需要做的是擺脫用戶控件中的相對綁定,並在綁定中指定ElementName(在用戶控件中)。順便說一句,你可能不需要OnPropertyChangedPropertyChangedCallback原因DependencyProperties其性質通知價值變化。

+0

它並沒有真正解決問題。刪除datacontext使父控件的綁定轉移到childcontrol。因此,我將不得不將綁定名稱更改爲控件中的名稱。 –