6

我有一个没有无参数构造函数的用户控件;让我们称之为WithoutDefaultConstructor。我想将WithoutDefaultConstructor调用myControl插入另一个控件(称为)的 XAML 代码中MainWindow。但是,我收到此编译器错误:

“WithoutDefaultConstructor”类型不能有 Name 属性。值类型和没有默认构造函数的类型可以用作 ResourceDictionary 中的项。

如何在不添加无参数构造函数的情况下解决此问题WithoutDefaultConstructor

以下是 的内容MainWindow.xaml

<Window x:Class="WpfApplication1.MainWindow"
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 xmlns:WpfApplication1="clr-namespace:WpfApplication1" Title="MainWindow" 
 Height="350" Width="525">
    <WpfApplication1:WithoutDefaultConstructor Name="myControl">
    </WpfApplication1:WithoutDefaultConstructor>
</Window>

以下是 的内容WithoutDefaultConstructor.xaml.cs

using System.Windows.Controls;

namespace WpfApplication1
{
    public partial class WithoutDefaultConstructor : UserControl
    {
        private int I_really_need_to_initialize_this_int;

        public WithoutDefaultConstructor(int i)
        {
            InitializeComponent();
            I_really_need_to_initialize_this_int = i;
        }
    }
}
4

2 回答 2

7

这与Name属性无关。您只是不能使用带有 XAML 参数的构造函数来创建对象的实例。在 XAML 2009 中有一种方法可以做到这一点,但它在编译为 BAML 的代码中不可用,例如这个。

于 2011-05-27T19:56:04.007 回答
4

只是不要这样做。int相反,在您的用户控件上公开一个属性。如果您真的想确保它被明确设置,请公开 anint?并 throw if it's null.

于 2011-05-27T19:47:35.007 回答