Naming user controls without default constructors in XAML

霸气de小男生 提交于 2019-12-22 05:39:13

问题


I have a user control without a parameterless constructor; let's call it WithoutDefaultConstructor. I want to insert a WithoutDefaultConstructor called myControl into the XAML code of another control (which is called MainWindow). However, I get this compiler error:

The type 'WithoutDefaultConstructor' cannot have a Name attribute. Value types and types without a default constructor can be used as items within a ResourceDictionary.

How do I fix this without adding a parameterless constructor to WithoutDefaultConstructor?

Here are the contents of 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>

Here are the contents of 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;
        }
    }
}

回答1:


It's not about the Name attribute. You just can't create an instance of an object using constructor with parameter from XAML. There is a way to do it in XAML 2009, but it's not available in code compiled to BAML, such as this.




回答2:


Just don't do it. Instead, expose an int property on your user control. If you really want to make sure it's explicitly set, expose an int? and throw if it's null.



来源:https://stackoverflow.com/questions/6156924/naming-user-controls-without-default-constructors-in-xaml

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!