从VSTO outlook插件打开WPF表单

时间:2012-04-15 17:01:41

标签: c# wpf vsto

我在Thisaddin.cs中有这段代码

public void Search(string input)
{           
    ServerList listofservers = new ServerList();            
    listofservers.Visibility;                    
}

ServerList是一个简单的WPF表单,其中包含列表框,但如何显示listofservers

我找不到listofserver.show();

enter image description here

3 个答案:

答案 0 :(得分:16)

首先,没有名为WPF Form的项目,只有WPF的用户控件。因此,一旦在XAML中创建了WPF UserControl,您就会注意到这是代码

<UserControl x:Class="SQL_openertak2.ServerList"
             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="454" d:DesignWidth="259" SizeToContent="WidthAndHeight">
    <Grid>
        <ListBox Height="410" HorizontalAlignment="Left" Margin="12,12,0,0" Name="listBox1" VerticalAlignment="Top" Width="242" />
        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="12,427,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
    </Grid>
</UserControl>

所以我看过XAML代码。因此,您可以看到整个事情是 USERCONTROL  您必须将其更改为 WINDOW ,然后您才能看到 .Show()

但请注意,您还必须更改xaml.cs中的代码

因为默认情况下它会是这样的

public partial class ServerList : UserControl

将其更改为

public partial class ServerList : Window

很明显的原因!! :)

答案 1 :(得分:0)

您也可以在layout panel中托管,例如:

  1. 在Windows窗体设计器中打开Form1。
  2. 在工具箱中,将TableLayoutPanel控件拖到for
  3. 在TableLayoutPanel控件的智能标记面板上,选择“删除最后一行”。
  4. 将TableLayoutPanel控件的大小调整为更大的宽度和高度。
  5. 在“工具箱”中,双击“UserControl1”以在TableLayoutPanel控件的第一个单元格中创建UserControl1的实例。
  6. UserControl1的实例托管在名为elementHost1的新ElementHost控件中。
  7. 在“工具箱”中,双击“UserControl1”以在TableLayoutPanel控件的第二个单元格中创建另一个实例。
  8. 在“文档大纲”窗口中,选择tableLayoutPanel1。有关更多信息,请参阅文档大纲窗口。
  9. 在“属性”窗口中,将“填充”属性的值设置为10,10,10,10。
  10. 调整两个ElementHost控件的大小以适应新布局。

答案 2 :(得分:0)

使用 Window 更改 UserControl ,已在XAML和c#类中进行了答复。

请记住,在通常基于Windows窗体的VSTO应用程序中,重要的是要记住将System.XAML添加到引用中,否则可能会在组合窗体布局时出错。

正如我最近遇到的那样,这可能会在VS2015中发生,其中向导过程未按预期运行,缺少更新类引用的过程。

这里有一些参考文献:The type 'Window' does not support direct content