2017-09-13 47 views
-2

爲什麼下面用「Binding」對象而不是字符串值填充我的依賴項屬性?用Binding對象填充的依賴屬性?

<local:CustomButton MyText="{Binding Name}" /> 

它與正常的按鈕一起使用。

這是我如何註冊我的按鈕屬性:

public static DependencyProperty RegisterProperty(string propertyName) { 
    return DependencyProperty.Register(propertyName, typeof(object), typeof(ButtonHD), new PropertyMetadata(null)); 
} 

剩下的只是正常的樣板代碼。爲什麼在將名稱綁定到MyText時獲得Binding對象?我的意思是它與正常的按鈕,這意味着綁定是好的。這非常奇怪。

完全實現我的用戶控件:

public sealed partial class CustomButton : UserControl { 
    public object MyText { 
     get { return GetValue(MyTextDependency); } 
     set { SetValue(MyTextDependency, value); } 
    } 

    public static readonly DependencyProperty MyTextDependency = RegisterProperty(nameof(MyText)); 

    public CustomButton() { 
     InitializeComponent(); 
    } 

    public void Render(CanvasControl sender, CanvasDrawEventArgs e) { 
     var test = MyText; 
     // The below fails: 
     string test = (string) MyText; 
    } 

    public static DependencyProperty RegisterProperty(string propertyName) { 
     return DependencyProperty.Register(propertyName, typeof(object), typeof(CustomButton), new PropertyMetadata(null)); 
    } 
} 

,在這裏我的XAML:

<Canvas:CanvasControl Background="Transparent" Draw="Render"> 
    <Interactivity:Interaction.Behaviors> 
     <Core:EventTriggerBehavior EventName="PointerReleased"> 
      <Core:InvokeCommandAction Command="{Binding MyCommand}" /> 
     </Core:EventTriggerBehavior> 
    </Interactivity:Interaction.Behaviors> 
</Canvas:CanvasControl> 

+0

你是怎麼看的財產,並獲得綁定的對象?你使用過'MyText.get' getter,還是像'ReadLocalValue'這樣的一些奇特的東西? – quetzalcoatl

+0

完全瘋狂猜測:在VS中,檢查該.xaml文件上的F4/Properties,並查看Build-Action是什麼,並與可正常工作的其他xaml文件進行比較。可能有些東西像它沒有被配置成View/Control/Page/etc,但是像resourcedictionary/etc這樣的更特殊的組件類型,其中{Binding}不受支持,而XAML與IoCC一樣工作,只是實例化對象並設置屬性。另一個瘋狂的猜測是:檢查ButtonHD/CustomButton的.xaml文件,並查看根標記是否與':baseclass'(UserControl)相匹配 - 它必須與前綴/名稱空間/ etc完全匹配。 – quetzalcoatl

+0

^以上的猜測是基於觀察你的代碼看起來很好,所以除非你在其他地方做了一些奇怪的事情,否則XAML編譯器似乎沒有適當地編譯XAML(即它不是'this.MyText = new Binding' 'this.SetBinding(MyTextProperty,new Binding')',或者基類不知何故不支持DependencyProperties /和/或綁定,他們把它當作正常值對象。 – quetzalcoatl

回答

-1

如果找你使用的地方旁邊你MYTEXT,有在檢查時你的對象是空的,在裏面沒有字符串,而是有Bindin g表達。 您可以指定一些默認值,並在DependencyPropertyChanged上添加一些操作,並驗證故障在哪裏。 樣品:

var metadata = new FrameworkPropertyMetadata("", OnValueChanged, null, null) 
return DependencyProperty.Register(propertyName, typeof(object), 
            typeof(CustomButton), metadata) 

private static void OnValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) 
{ 
    ; 
}