如果現在切換按鈕的名稱,那麼你可以使用下面的代碼:如果你不
var uiElement = (ComboBox)sender;
var toggleButton = uiElement.Template.FindName("<Your ToggleButton Name Here>",uiElement) as ToggleButton;
if(toggleButton!=null)
{
// Your code goes here.
}
知道ToggleButton的名稱,那麼在這種情況下,唯一的選擇是遍歷視覺樹並找到類型切換按鈕的元素。示例代碼如下:
internal static List<T> FindVisualChild<T>(this DependencyObject depObj) where T : DependencyObject
{
if (depObj != null)
{
List<T> childItems = null;
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
if (childItems == null)
childItems = new List<T>();
DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
if (child != null && child is T)
{
childItems.Add((T)child);
}
var recursiveChildItems = FindVisualChild<T>(child);
if (recursiveChildItems != null && recursiveChildItems.Count > 0)
childItems.AddRange(recursiveChildItems);
}
return childItems;
}
return null;
}
上述方法是對DependencyObject的擴展,並將從可視化樹中返回指定類型的所有元素。如果只需要指定類型的第一個元素,則可以對該方法進行輕微更改,並在獲取指定類型的第一個元素並返回時打破循環。
這將幫助你: [WPF的方式找到控制(http://stackoverflow.com/questions/636383/wpf-ways-to-find-controls) –
這可能需要一個性能命中我遍歷Visual Tree,還有其他建議嗎? –
你必須遍歷VisualTree來獲取孩子。爲什麼這會成爲業績衝擊? –