我有一个用C#编写的工作应用程序,现在我想扩展该应用程序,以允许用户在查看应用程序和查看内置Web浏览器(在同一应用程序窗口内)之间切换。 / p>
我还有一个单独的工作网络浏览器,也是用C#编写的。
我刚刚在原始应用程序中添加了功能,包括“选项卡式”显示,原始应用程序将显示在第一个选项卡上,内置Web浏览器显示在第二个选项卡上。
应用程序的“标签”显示是使用Visual Studio中的XAML
标记创建的。我现在想要将已用C#编写的Web浏览器实例添加到我在XAML标记中创建的第二个选项卡中。
这将是:
<TabControl>
<TabItem Header="Browser">
<StackPanel>
<!-- Call/ instantiate the browser here -->
</StackPanel>
</TabItem>
</TabControl>
但我不知道如何在XAML标记内调用/创建浏览器实例...
使用C#创建浏览器:
namespace Agent
{
public partial class Browser : Form
{
public Browser()
{
...
}
}
}
有人可以向我解释如何在XAML标记的内部创建Browser
的实例吗?
修改
好的,所以我按照建议的答案中的建议编辑了我的XAML标记 - 我现在有:
<Window ...
xmlns:Agent="clr-namespace:Agent"
...>
<Grid>
...
<TabControl>
<TabItem Header="R">
<StackPanel>
...
</StackPanel>
</TabItem>
<TabItem Header="Browser">
<Agent:Browser x:Name="Browser" />
</TabItem>
</TabControl>
</Grid>
</Window>
我还更新了我的Browser.cs
课程,现在它正在扩展UserControl
,而不是Form
:
public partial class Browser : UserControl{
但是,我收到了编译错误:
<Agent:Browser x:Name="Browser" />
说:
命名空间“clr-namespace:Agent”中不存在名称“Browser”。
但Browser
确实存在Agent
,如我在此处所包含的代码所示......实际上,在键入行<Agent:Browser x:Name="Browser />
时,我输入{ {1}},:
是自动填充菜单中出现的选项之一...
我在这里做错了什么?为什么编译器不认为Browser
中存在Browser
?
答案 0 :(得分:5)
在XAML中实例化任何对象的关键是确保声明命名空间。您可以提供任何XML前缀并将其分配给CLR命名空间(ref),它将像using
语句一样工作。例如:
<TabControl xmlns:agent="clr-namespace:Agent">
<TabItem Header="Browser">
<StackPanel>
<agent:Browser/>
</StackPanel>
</TabItem>
</TabControl>
注意:您的对象必须扩展UIElement
(或其子代之一)才能在XAML树中工作。如果您的控件是WinForms控件,则需要找到等效的XAML控件或将其包装在WindowsFormsHost
(ref)中。
WPF与WinForms
本节的目的是帮助识别命名空间中的平台代码,以及一些权衡。我已经使用了两者,并且可以从经验中说,他们每个人都有好点,而且......不是那么好点。
System.Windows.Forms
命名空间中,可通过引用System.Windows.Forms.dll程序集来使用。System.Windows
和System.Windows.Controls
名称空间中,可通过引用一组DLL来使用如果你刚刚开始,我会继续坚持下去,为WPF开始更重的学习曲线。它将提供一个基本的理解,转移到其他平台,如Windows应用商店应用程序等。
答案 1 :(得分:0)
首先,您需要将该标记放在UserControl
开场标记内,如下所示:
<UserControl x:Class="View.testControl"
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"
xmlns:Agent="clr-namespace:Agent">
然后你可以像这样使用它:
<TabControl>
<TabItem Header="R">
<StackPanel>
...
</StackPanel>
</TabItem>
<TabItem Header="Browser">
<Agent:Browser x:Name="Browser" />
</TabItem>
</TabControl>
修改强>
根据您在评论中告诉我的内容,您需要在WPF项目中创建Custom Control
。要做到这一点,你需要:
WPF
; Custom Control
; 现在,您可以使用xmlns
属性在XAML中创建该控件
关于如何创建自定义控件的Here is a great example from msdn