调用子用户控件的功能

时间:2014-03-05 21:00:31

标签: c# wpf xaml

我有一个窗口。

<Window 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Class="GamingClient.UserInterface.MenuPartieRapide"
        xmlns:local="clr-namespace:GamingClient.UserInterface">

        <local:MapCarrousel />

</Window>

这是MapCarrousel用户控件

<UserControl
             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"
             x:Class="GamingClient.UserInterface.MapCarrousel" d:DesignWidth="1002" d:DesignHeight="122">

</UserControl>

这是userControl背后的代码

 public int GetMapId()
 {
    .... Return some Int
 }

我尝试在我的Window

中为我的MapCarrousel添加名称
<local:MapCarrousel Name="Test" />

因此我尝试在我的Window.xaml.cs中调用它

void function Test()
{
       Test.GetMapId();
}
  1. 命名空间中无法访问测试? intellisense不承认它。
  2. 在#1之后,我无法调用未定义对象上的函数...
  3. 然后我尝试了以下操作:在用户控件中添加x:name并在我的Window.xaml.cs中的一个函数中调用x:name。

    之前有相同的结果。

    问题是:如果动态创建用户控件(即新的User-Control())但添加了用户控件,如何在用户控件上调用公共函数,该用户控件是我所在的命名空间/对象的子级把设计师扔了?

1 个答案:

答案 0 :(得分:1)

当您尝试在Name控件上设置MapCarrousel属性时,您应该遇到如下错误:

  

错误2因为'MS.Internal.Design.Metadata.ReflectionTypeNode'是在同一个程序集中实现的,所以必须设置x:Name属性而不是MS.Internal.Design.Metadata.ReflectionPropertyNode属性。

这告诉你不能这样做:

<local:MapCarrousel Name="Test" />

正如错误告诉您的那样,您需要这样做:

<local:MapCarrousel x:Name="Test" />

然后你就可以打电话了:

Test.GetMapId();