Silverlight中的childWindow控件作为自定义控件

时间:2015-11-13 17:43:26

标签: c# wpf silverlight

我知道silverlight已经有了一个子窗口控件,但我想从我自己的库中使用这个子窗口控件。

具体来说我希望代码看起来像这样: XAML:

<mycontrols:myChildWindow x:Class="SilverlightClassLibrary1.ChildWindow1"
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
       xmlns:mycontrols="clr-namespace:mynamespace;assembly=myassembley"
       Width="400" Height="300" 
       Title="ChildWindow1">
<Grid x:Name="LayoutRoot" Margin="2">
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>

    <Button x:Name="CancelButton" Content="Cancel" Click="CancelButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,12,0,0" Grid.Row="1" />
    <Button x:Name="OKButton" Content="OK" Click="OKButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,12,79,0" Grid.Row="1" />
</Grid>

我的项目会引用myassembly.dll,它会包含mynamespace。在mynamespace中会有类myChildWindow。这个类可以从System.windows.control.childwindow继承(可能)。

我知道这是一种奇怪的实现方式。但我需要它是这样的。请告诉我如何实现myChildWindow类?

如果问题不明确,请提出进一步的问题。我可以在问题中进行编辑。

2 个答案:

答案 0 :(得分:1)

你需要两件事。

<强> 1。创建从ChildWindow派生的类

namespace mynamespace
{    
    public class myChildWindow : ChildWindow
    {
        public myChildWindow():base()
        {
            //Add custom constructor code
        }
    }
}

<强> 2。在XAML更改

  

的xmlns =&#34; HTTP://schemas.microsoft.com/winfx/2006/xaml/presentation"

  

的xmlns =&#34; HTTP://schemas.microsoft.com/client/2007"

以XAML正文为例:

<mycontrols:myChildWindow x:Class="Project.Views.EditReport"
           xmlns="http://schemas.microsoft.com/client/2007"
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
           xmlns:mycontrols="clr-namespace:mynamespace;assembly=myassembley"
           Width="400"
           Title="Edit Report"></CWindow>

答案 1 :(得分:0)

在我看来,好像你已经回答了自己的问题。如上所述,您可以从ChildWindow继承。但是,在那之后,您需要做的是在Silverlight项目中包含对此类的程序集的引用。一旦你这样做,程序集将被添加到AppManifest,DLL将包含在Xap包中,你将能够像你已经完成的那样在Xaml中引用它。

上面的命名空间是错误的想法。它应该是:

namespace mynamespace
{    
    public class myChildWindow : ChildWindow
    {
        public myChildWindow():base()
        {
            //Add custom constructor code
        }
    }
}

应将其编译到名为“myassembley”的程序集中。但是,如果要引用另一个程序集,则不能在Xaml中使用x:Class。