我被分配了一项任务,但我很困惑。我在 WPF 应用程序中调用 API,它返回一个 Windows 窗体面板。我的工作是在 TabControl 中显示面板
目前,我正在 WPF 项目的 CodeBehind 中执行代码,如下所示
public MainWindow()
{
InitializeComponent();
var panel = GetPanelFromApi();
this.MyTabControl.Items.Add(panel);//fail
}
Run Code Online (Sandbox Code Playgroud)
程序运行,没有崩溃,但面板没有显示在我的 TabControl 中,但是,TabControl 确实呈现为好像有 1 个项目(尽管面板的visible属性设置为 true,但可能它只是不可见)!
如果我将代码更新为
public MainWindow()
{
InitializeComponent();
TextBlock tb = new TextBlock();
tb.Text = "Test";
this.MyTabControl.Items.Add(tb);//yipee
}
Run Code Online (Sandbox Code Playgroud)
然后它按预期工作(我看到TextBlock控件),所以问题是由于 Wpf 不喜欢面板......我不知道如何修复它或我应该看什么。
XAML
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TabControl x:Name="MyTabControl"></TabControl>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
要添加 Windows 窗体控件,您需要使用WindowsFormHost,这就是添加它的方法 -
System.Windows.Forms.Integration.WindowsFormsHost host1 =
new System.Windows.Forms.Integration.WindowsFormsHost();
System.Windows.Forms.Panel panel =
new System.Windows.Forms.Panel()
{
BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle};
host1.Child = panel;
((this.MyTabControl.Items[0] as TabItem).Content as Grid).Children.Add(host1);
Run Code Online (Sandbox Code Playgroud)
另外,如果您使用 TabControls 并且不使用 TabItems 作为其子项,则使用 TabControl 是没有用的(而是可以直接使用 Grid)。但要添加 TabItems,您应该编写 XAML,如下所示:
<TabControl x:Name="MyTabControl" >
<TabItem Header="TabItem 1">
<Grid Background="#FFE5E5E5"/>
</TabItem>
<TabItem Header="TabItem 2">
<Grid Background="#FFE5E5E5"/>
</TabItem>
</TabControl>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5613 次 |
| 最近记录: |