2011-08-08 82 views
1

這看起來很簡單,但我在網上找不到任何關於我想添加到自定義控件中的行爲。檢測控件上的默認按鈕

我的自定義控件是一個帶有選項列表的文本框。當用戶輸入的文本不是列表的一部分時,會出現一個彈出窗口,列表允許用戶選擇正確的選項。

有時,在自定義控件添加的容器中可能會有一個默認按鈕。如果是這樣,當按下回車鍵時,如果文本錯誤,必須顯示彈出窗口。如果沒有默認按鈕,則在輸入時,即使文本錯誤也不會發生任何事情。

爲了能夠創建此行爲,我必須能夠檢測容器中是否存在defaultbutton,並且必須在cutom控件的c#代碼中完成。

我希望描述足夠清楚。 在此先感謝

回答

0

因爲我無法知道其他控件我從自定義控件有我選擇去這樣的:

我做了一個遞歸函數找到使用FrameworkElement.Parent 具有父第一個家長,我可以採取看看它包含的每個控件。 只要我看到一個按鈕,我不得不驗證是否IsDefault。 對於這一個,我使用了VisualTreeHelperGetChildrenCount(DependencyObject obj_Parent)GetChild(DependencyObject obj_Parent, int childIndex)。遞歸性再次...

它工作得很好,即使它意味着更多的代碼執行。

1

您是否考慮過實施MVVM方法和命令模式?只要您的視圖模型知道選擇是什麼,就可以將默認按鈕綁定到命令。只要命令CanExecute處理程序返回false,即沒有輸入/選擇適當的選項,該按鈕將被禁用,並且不會響應用戶按Enter鍵。

+0

我想我解釋錯了。一方面,我們有一個默認按鈕,甚至可能不在那裏,而且還有其他的東西。另一方面,我們有一個自定義控件,它需要正確的值,並且不允許用戶放開它,選擇正確的值。如果用戶試圖離開控制並輸入了錯誤的值,則會顯示一個列表。這些行動並沒有太多聯繫。重點是當存在默認按鈕時輸入文本錯誤時觸發列表。如果沒有默認按鈕,該列表將不會顯示在回車中,因爲它沒有效果。 – Fjodr