在我的应用程序中,我有一个UserControl
我使用WebBrowser
控件。
以下是UserControl
的代码:
<UserControl x:Class="tool.ucMain"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="354" d:DesignWidth="440">
<Grid>
<DockPanel>
<WebBrowser Name="wbMap" DockPanel.Dock="Left" MinWidth="300"></WebBrowser>
<DataGrid Name="grdSignals" DockPanel.Dock="Right" ItemsSource="{Binding}" AutoGenerateColumns="False">
</DataGrid>
</DockPanel>
</Grid>
我在另一个UserControl
UserControl
中使用此TabControl
。这是其他UserControl
的代码:
<Grid>
<TabControl>
<TabItem Name="tabMain" Header="Main">
<uc:ucMain />
</TabItem>
<TabItem Name="tabDataExplorer" Header="Data Explorer"/>
</TabControl>
</Grid>
ucMain 是第一个UserControl
。当我清理项目时,我可以看到第一个用户控件。但是当我构建/运行它时,它会消失,我会收到错误,如下图所示。即使在设计视图中我也会收到此错误。
答案 0 :(得分:0)
我通过创建包含WebBrowser的UserControl来复制此行为,并调用该BrowserContainer。然后,我创建了另一个名为BrowserBrowserContainer的UserControl,并添加了我的第一个UserControl。之后,我将BrowserBrowserContainer UserControl添加到我的测试项目的MainWindow.xaml文件中。
当我给WebBrowser一个名称,例如&#34; Browser&#34;,然后将以下代码添加到BrowserContainer的构造函数中时,我得到了与您描述的完全相同的行为。
public BrowserContainer()
{
InitializeComponent();
Browser.Source = new Uri("c:\\thisfiledoesntexist");
}
当然,解决方案不是设置Source,或者将其设置为在设计时有效的东西。无论您是否处于设计模式,都会调用无参数构造函数。
答案 1 :(得分:0)
如果您尝试导航到本地文件,则应始终将file:///
添加到Uri路径的前面。
修改强>
我刚试过它,我可以看到主窗口的设计器视图中发生了这个错误。我可以看到Visual Studio试图触发UserControl的Loaded事件。不知何故,AppDomain.CurrentDomain.BaseDirectory返回Visual Studio路径。
跳过此错误的最佳方法可能是使用DesignerProperties.GetIsInDesignMode()
例如,您可以执行以下操作以在设计器视图中跳过此错误。
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
if (DesignerProperties.GetIsInDesignMode(this)) return;
String appdir = System.IO.Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory);
String mapPath = System.IO.Path.Combine(appdir, "MAP.html");
ResultWebBrowser.Navigate(new Uri("file:///" + mapPath));
}