解決WPF附加屬性的Set函數(shù)不調(diào)用的問題
今天寫程序的時候用到了附加屬性,我是用VS內(nèi)置的propa的代碼段來實(shí)現(xiàn)的,代碼如下:
class Attach
{
public static bool GetIsEnabled(DependencyObject obj)
{
return (bool)obj.GetValue(IsEnabledProperty);
}
public static void SetIsEnabled(DependencyObject obj, bool value)
{
obj.SetValue(IsEnabledProperty, value);
}
public static readonly DependencyProperty IsEnabledProperty =
DependencyProperty.RegisterAttached("IsEnabled", typeof(bool), typeof(Attach), new PropertyMetadata(false));
}在XAML中使用的方式如下:
<Grid local:Attach.IsEnabled="true" x:Name="grid" />
但是,調(diào)試的時候卻發(fā)現(xiàn)一個問題:雖然附加屬性的值的讀取和寫入都沒有什么問題,但是按理說Attach.SetIsEnabled函數(shù)在啟動的時候應(yīng)該會調(diào)用一次在對,但卻斷點(diǎn)斷不到。加入屬性變更的回調(diào)通知時,回調(diào)函數(shù)也能正常的運(yùn)行。
我在網(wǎng)上找了一些示例代碼,發(fā)現(xiàn)有有的斷點(diǎn)能斷到Set函數(shù)中,有的卻不行。然后就將示例代碼和我的代碼一一比較,最后發(fā)現(xiàn)只要在注冊附加屬性的名稱后面加一個"Property"就可以了。改成如下所示
class Attach
{
public static bool GetIsEnabled(DependencyObject obj)
{
return (bool)obj.GetValue(IsEnabledProperty);
}
public static void SetIsEnabled(DependencyObject obj, bool value)
{
obj.SetValue(IsEnabledProperty, value);
}
public static readonly DependencyProperty IsEnabledProperty =
DependencyProperty.RegisterAttached("IsEnabledProperty", typeof(bool), typeof(Attach), new PropertyMetadata(false));
}最開始我以為是VS提供的代碼段有問題,導(dǎo)致我生成了錯誤的代碼,便到MSDN上去查了一下,發(fā)現(xiàn)MSDN的示例代碼頁也沒有"Property"后綴(地址:附加屬性概述)。也就是說,自動生成的不帶"Property"后綴才是正統(tǒng)形式。雖然兩種形式的執(zhí)行結(jié)果都是一樣的,但是默認(rèn)的這種第一次不掉用Set函數(shù)行為肯定是有問題的。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#實(shí)現(xiàn)在前端網(wǎng)頁彈出警告對話框(alert)的方法
這篇文章主要介紹了C#實(shí)現(xiàn)在前端網(wǎng)頁彈出警告對話框(alert)的方法,涉及C#通過自定義函數(shù)調(diào)用window.alert方法彈出對話框的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-04-04
c# DateTime常用操作實(shí)例(datetime計(jì)算時間差)
字符串操作DateTime操作,datetime計(jì)算時間差,取當(dāng)前時間,更多方法看下面代碼2013-12-12
C#使用后臺線程BackgroundWorker處理任務(wù)的總結(jié)
這篇文章主要介紹了C#使用后臺線程BackgroundWorker處理任務(wù)的總結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07
C#自動創(chuàng)建數(shù)據(jù)庫實(shí)現(xiàn)代碼
C#下創(chuàng)建數(shù)據(jù)庫的代碼2008-03-03

