如果你還不知道資料觸發器怎麼使用,或者連資料觸發器是什麼都還不了解,請先閱讀wpf觸發器之資料觸發器(a)。
1. 當你知道了資料觸發器是當某個.net屬性值變化時觸發的操作,比如說當數字變成了 "8",那就讓數字變成紅色。那麼使用資料觸發器實現此功能就可以這樣寫:
<2. 問題來了——可是,當 "datatrigger" 的 "value" 是乙個變數值你要怎麼辦呢??datatrigger
binding
=",path=text}
"value
="8"> ...
如果你了解過wpf繫結,你可能會先想到這樣來修改你的**:
<執行程式,編譯器會丟擲乙個錯誤使用導致的異常:datatrigger
binding
=",path=text}
"value
=""> ...
此異常說不能在 "datatrigger" 的 "value" 屬性上使用 "banding" ,原因是它不是乙個依賴屬性。只有依賴屬性可以使用 「binding" 。
關於此異常的詳細資訊,請大家自行查閱 」binding「 和 」依賴屬性「 的說明,在這裡不做過多解釋。
3. 這個問題,在msdn技術論壇有人進行了**:如何在datatrigger的value中設定程式級變數? usercontrol中如何繫結窗體變數?
4. 解決方案。
使用多重繫結,關於wpf "多重繫結" 的知識,請檢視msdn文件,在這裡也不做過多解釋。檢視 "多重繫結" 這裡。
此問題是因為不使用固定的值 "8" 來進行數字紅色顯示引起的,而是需要根據變數 "inputvalue" 決定。
所以,此解決辦法的原理是把變數值 "inputvalue" 和當前的值 "nowvalue" 都傳入某個方法,返回乙個布林值,表示 "inputvalue" 和 "nowvalue" 是否相等。
這樣,就可以把 value
=""轉換為 value
="true",即把變化值轉化為布林值 「true」。
下面給出具體步驟:
多重繫結需要使用多值轉換器。
首先定義乙個多值轉換器類:timeisupconverter。**如下:
1在xaml檔案中引用剛剛定義轉換器。public
class
timeisupconverter : imultivalueconverter219
return
false;20
}2122public
object convertback(object value, type targettypes, object
parameter, system.globalization.cultureinfo culture)
2326 }
<usercontrol
xmlns:views
...
<修改資料轉換器的**:usercontrol.resources
>
<
views:timeisupconverter
x:key
="timeisupconverter"
/>
usercontrol.resources
>
<ok,問題解決!style.triggers
>
<
datatrigger
>
<
datatrigger.binding
>
<
multibinding
converter=""
>
<
binding
elementname
="tbinputvalue"
path
="text"
/>
<
binding
elementname
="tbnowvalue"
path
="text"
/>
multibinding
>
datatrigger.binding
>
<
datatrigger.value
>true
datatrigger.value
>
datatrigger
>
style.triggers
>
WPF觸發器之資料觸發器(A)
wpf觸發器 屬性觸發器 當依賴屬性的值改變時呼叫。資料觸發器 當普通.net屬性的值改變時呼叫。事件觸發器 當路由事件被觸發時呼叫。1.資料觸發器示例 數字從0 9計數,當數字變為8時候,數字變化成紅色並加粗進行顯示。0 1 2 3 4 5 6 7 8 9 0 2.新建wpf專案,專案名稱 dat...
WPF之觸發器
觸發器,應用屬性值或有條件地執行操作 1 觸發源 控制項 2 觸發條件 某屬性為某個值,或執行某個事件時 3 執行操作 更改某個屬性值或執行某個事件 4 舉例 當視窗載入時 執行某個事件時 以動畫的形式將視窗的大小倍數從 0 到 1 展示 執行某個事件 1 根據觸發器的觸發條件,在 wpf 中,觸發...
觸發器 mysql觸發器
觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...