我正在尝试将工具提示添加到我试过的WPF应用程序中的所有控件
foreach(IRegion region in _RegionManager.Regions)
{
foreach(IView view in region.Views)
{
foreach(Control c in view.)//here my problem
c.ToolTip = "some tooltip";
}
}
这不起作用,因为我不知道在那种情况下我应该在哪里寻找控件。 谢谢你的任何建议。
答案 0 :(得分:1)
在WPF中,应该通过XAML标记以声明方式定义视图。
您通常会在视图中定义工具提示:
<UIElement ToolTip="toolTipContent"/>
当然,您可以使用绑定:
<UIElement ToolTip="{Binding ToolTipText}"/>
请注意,Prism的IView
接口不提供有关视图实例的实际类型的任何信息。它可以是Page
,UserControl
甚至是TextBox
。
如果您愿意,您可以使用linq并仅获取这些视图,例如UserControl
S:
foreach(UserControl view in region.Views.OfType<UserControl>())
{
// do something...
}
但这并没有真正帮助你,因为在WPF中,没有像我们在Windows窗体中那样迭代UserControl
的子元素的简单方法。
您可以使用VisualTreeHelper
并遍历您的可视树寻找子元素,但这很尴尬:
void GetChildControls(IList<Visual> container, Visual parent)
{
int childCount = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < childCount; i++)
{
Visual visual = (Visual)VisualTreeHelper.GetChild(parent, i);
container.Add(visual);
if (VisualTreeHelper.GetChildrenCount(visual) > 0)
{
GetChildControls(container, visual);
}
}
}