В MainPage.xaml.cs (Silverlight Application), я могу сделать что-то вроде этого:Как создать элементы управления из кода в пользовательском элементе управления?
StackPanel myStackPanel = new StackPanel();
Button myButton = new Button();
myButton.Content = "Button";
myButton.Width = 200;
myButton.Height = 30;
Button myButton1 = new Button();
myButton1.Content = "Button 1";
myButton1.Width = 200;
myButton1.Height = 30;
myStackPanel.Children.Add(myButton);
myStackPanel.Children.Add(myButton1);
this.LayoutRoot.Children.Add(myStackPanel);
Что является эквивалентом этого кода в пользовательский элемент управления, когда я пытаюсь создать эти элементы управления из кода?
Update:
Мой вопрос, вероятно, слишком запутанным. Я попробую лучшую формулировку. Итак, у меня есть
Generic.xaml
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:DemoAddControlLib">
<Style TargetType="local:DemoControlShowtime">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:DemoControlShowtime">
<Grid x:Name="LayoutRootControl">
<Button x:Name="Button1" Content="Hi" Width="150" Height="30"></Button>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
И код:
DemoControlShowtime.cs
[TemplatePart(Name = "Button1", Type=typeof(Button))]
public class DemoControlShowtime : Control
{
public DemoControlShowtime()
{
this.DefaultStyleKey = typeof(DemoControlShowtime);
}
// Events
public override void OnApplyTemplate()
{
Button1 = (Button)GetTemplateChild("Button1");
}
private Button button1;
private Button Button1
{
get { return button1; }
set
{
if (button1 != null)
{
Button1.Click -= new RoutedEventHandler(myButton_Click);
}
button1 = value;
button1.Click += new RoutedEventHandler(myButton_Click);
}
}
void myButton_Click(object sender, RoutedEventArgs e)
{
Button1.Content = "Hello Button";
}
}
Если я нажимаю на Button1 изменения контента из " Привет "на" Hello Button ". Я хочу, чтобы щелкнуть Button1, чтобы добавить StackPanel с двумя кнопками в качестве своих детей в Grid LayoutRootControl. Я знаю, что свойство Visibility и помещать его в xaml было бы проще, но мне любопытно, как это сделать из кода.
Надеюсь, это намного яснее, чем раньше.
Не могли бы вы уточнить свой вопрос? Я не понимаю, что вы ищете. Вам интересно, как добавить CustomControl в myStackPanel? Или вам интересно, как сделать myStackPanel настраиваемым элементом управления, который вы добавляете в LayoutRoot? – JSprang
Мне интересно, как добавить программный пакет StackPanel со своими дочерними элементами в свой пользовательский элемент управления (Silverlight Library) - например MyDemoControl.cs (здесь должен быть код с myStackPanel) + Generic.xaml. Может быть, я полностью решаю проблему. – nubm
Итак, вы хотели бы сделать что-то вроде этого: у MyDemoControl есть кнопка и MyCustomControl, где MyCustomControl имеет что-то в ней (например, StackPanel)? – JSprang