我正在编写一个简单的教程"这个库允许开发人员轻松地将分步教程添加到他们现有的WPF应用程序中。这些教程将帮助应用程序的用户首次添加一个突出显示控件的叠加层并解释其用途。最终结果将如下所示:
常规申请:
解释控件目的的叠加层:
我的问题是:将叠加视图注入当前窗口的最可靠和不引人注目的方法是什么?到目前为止,我提出的最好的方法是要求开发人员将附加属性添加到托管覆盖的任何窗口,然后在窗口Initialized
回调中添加必要的元素:
public static void IsTutorialOverlayCompatibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if ((Boolean)e.NewValue == true)
{
if (sender as Window != null)
{
Window window = (Window)sender;
window.Loaded += new RoutedEventHandler((o, eargs) =>
{
Grid newRootElement = new Grid();
newRootElement.Name = "HelpOverlayRoot";
if (window.Content as UIElement != null)
{
UIElement currentContent = (UIElement)window.Content;
window.Content = null;
newRootElement.Children.Add(currentContent);
newRootElement.Children.Add(new HelpOverlayControl());
window.Content = newRootElement;
}
});
}
}
}
然而,这感觉就像一个黑客,而且我不确定这种方法是否会破坏应用程序的布局。此外,它要求窗口的Content
属性是UIElement
类型的实例。
我想避免强迫开发人员更改他们的XAML(即向每个窗口添加自定义覆盖UserControl
)以便使用我的库。将此类功能添加到现有WPF应用程序的最佳方法是什么?