問題:當我選擇一個復選框(在“1”列中)時,OnSelection事件應該在同一行的“0”列上找到一個標簽,但我得到:
System.InvalidCastException:'無法將'System.Windows.Controls.CheckBox'型別的物件轉換為'System.Windows.Controls.Label'型別。'
我正在這樣初始化視圖:
Label lbName = new() { Content = "labelName" };
Grid.SetColumn(lbName, 0);
GrWindow.Children.Add(lbName);
CheckBox ckSelection = new();
ckSelection.Checked = OnSelection;
Grid.SetColumn(ckSelection, 1);
GrWindow.Children.Add(ckSelection);
在OnSelection觸發例外的方法上:
string? labelName = GrWindow.Children.
Cast<Label>().
First(e => Grid.GetRow(e) == row && Grid.GetColumn(e) == 0).
Content as string;
在我的應用程式的其他地方,我正在使用一種非常相似的方法從“0”行獲取名稱并且作業正常。
每行/列='0'上只有一個孩子,它是一個標簽,我不知道如何除錯這種情況,因為復選框在column='1'上。
提前致謝。
uj5u.com熱心網友回復:
代替
.Cast<Label>()
和
.OfType<Label>()
只獲得標簽。
否則,您將嘗試將所有子元素轉換為 Label,這對于 CheckBox 來說當然會失敗。
查詢 Children 集合的另一種方法可能是將關聯的 Label 分配給 CheckBox 的 Tag 屬性
ckSelection.Tag = lblName;
并將其回傳到事件處理程式中
var checkBox = (CheckBox)sender;
val label = (Label)checkBox.Tag;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/521341.html
標籤:wpf.net-6.0
上一篇:如何從WPFInfragisticsXamDataGrid欄位中洗掉美元符號
下一篇:從矩形哈希碼中獲取Y位置
