如何将自定义控件的类放在另一个自定义控件中?

时间:2013-05-12 20:42:43

标签: wpf class nested custom-controls

说我已经编码了这样的自定义Canvas

public class MyCustomControl : Canvas
    {
        public MyCustomControl()
        {
            this.Background = System.Windows.Media.Brushes.LightBlue;
        }
    }

我需要在其中放入另一个自定义编码(自定义控件)Label,并将整个项目用作另一个项目中的一个自定义控件。

我这样做了:

public class MyCustomControl : Canvas
    {
        public MyCustomControl()
        {
            this.Background = System.Windows.Media.Brushes.LightBlue;
        }
       //My custom label
        public class MyLabel : Label
        {
            public MyLabel()
            {
                Content = "Hello!!";
                Width = 100;
                Height = 25;
                VerticalAlignment = System.Windows.VerticalAlignment.Center;
                HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
            }
        }
    }

但我没有看到OTHER项目中的Label。见图:
enter image description here
因为我在第一个项目中创建了一个自定义控件,所以我没有视觉参考(比如XAML设计窗口或其他任何东西),我可以依赖它,基本上看到所有元素都被正确编码和可见。

首先,我不知道它是否是创建嵌套自定义控件的正确方法。 第二,我不知道为什么标签没有在那里显示。可能是因为我必须将它添加到画布中。但是我不知道将标签添加到它的父级的代码,即画布。

1 个答案:

答案 0 :(得分:1)

将标签添加到画布:

public MyCustomControl()
{
    this.Background = System.Windows.Media.Brushes.LightBlue;
    this.Children.Add(new MyLabel());
}

但在这种情况下,您不需要自定义标签:

public MyCustomControl()
{
    this.Background = System.Windows.Media.Brushes.LightBlue;
    this.Children.Add(new Label{
        Content = "Hello!!",
        Width = 100,
        Height = 25,
        VerticalAlignment = System.Windows.VerticalAlignment.Center,
        HorizontalAlignment = System.Windows.HorizontalAlignment.Center
    });
}

如果您想设计Canvas,请将UserControl添加到您的第一个项目中。

<UserControl ...>
    <Canvas Background="LightBlue">
        <Label Width="100" Height="25" VerticalAlignment="Center" HorizontalAlignment="Center">
            Hello!!
        </Label>
    </Canvas>
</UserControl>