如果现在切换按钮的名称,那么你可以使用下面的代码:如果你不
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来获取孩子。为什么这会成为业绩冲击? –