-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>
你是怎麼看的財產,並獲得綁定的對象?你使用過'MyText.get' getter,還是像'ReadLocalValue'這樣的一些奇特的東西? – quetzalcoatl
完全瘋狂猜測:在VS中,檢查該.xaml文件上的F4/Properties,並查看Build-Action是什麼,並與可正常工作的其他xaml文件進行比較。可能有些東西像它沒有被配置成View/Control/Page/etc,但是像resourcedictionary/etc這樣的更特殊的組件類型,其中{Binding}不受支持,而XAML與IoCC一樣工作,只是實例化對象並設置屬性。另一個瘋狂的猜測是:檢查ButtonHD/CustomButton的.xaml文件,並查看根標記是否與':baseclass'(UserControl)相匹配 - 它必須與前綴/名稱空間/ etc完全匹配。 – quetzalcoatl
^以上的猜測是基於觀察你的代碼看起來很好,所以除非你在其他地方做了一些奇怪的事情,否則XAML編譯器似乎沒有適當地編譯XAML(即它不是'this.MyText = new Binding' 'this.SetBinding(MyTextProperty,new Binding')',或者基類不知何故不支持DependencyProperties /和/或綁定,他們把它當作正常值對象。 – quetzalcoatl