Wie fügen Sie Steuerelemente dynamisch zu einem UserControl durch Benutzer XAML?
Erstellen Sie ein Benutzer-Steuerelement, enthält ein TextBlock und ein StackPanel-Steuerelement, das ermöglicht es dem Benutzer, um seine/Ihre eigenen Steuerelemente auf das Benutzersteuerelement dynamisch in XAML.
Hier ist das Beispiel für die XAML für mein UserControl:
<UserControl x:Class="A1UserControlLibrary.UserControlStackPanel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="200" d:DesignWidth="300">
<StackPanel>
<TextBlock Text="I want the user to be able to add any number of controls to the StackPanel below this TextBlock."
FontFamily="Arial" FontSize="12" FontWeight="DemiBold" Margin="5,10,5,10" TextWrapping="Wrap"/>
<StackPanel>
<!-- I want the user to be able to add any number of controls here -->
</StackPanel>
</StackPanel>
</UserControl>
Ich möchte, dass der Benutzer in der Lage sein, um das einbetten dieses Steuerelement in Ihrem XAML, und fügen Sie Ihre eigenen Kontrollen auf die stack-panel der Benutzer-Steuerung:
<uc:A1UserControl_StackPanel x:Name="MyUserControl_Test" Margin="10" Height="100">
<Button Name="MyButton1" Content="Click" Height="30" Width="50"/>
<Button Name="MyButton2" Content="Click" Height="30" Width="50"/>
<Button Name="MyButton3" Content="Click" Height="30" Width="50"/>
</uc:A1UserControl_StackPanel>
Tun dies unter Verwendung der obigen XAML-Code funktioniert nicht. Irgendwelche Ideen?
- Ich glaube nicht, dass Sie tun können, dass in
XAML
... es sei denn, ich bin Missverständnis Ihren Beispiel. - Gibt es eine Möglichkeit im code hinter das zu tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du kann tun, obwohl Sie nicht ganz wie dein Beispiel. Sie müssen zwei Dinge. Die erste ist die Deklaration einer
DependencyProperty
TypUIElement
haben, die alle Steuerelemente erweitern:Zweiten ist zu erklären
ContentControl
im XAML-Code, wo Sie wollen, dass die Inhalte angezeigt:Meiner Meinung nach, wenn Sie
StackPanel
s, Sie könnte finden, die Ihre Inhalte nicht richtig angezeigt... ich würd dir raten es zu benutzenGrid
s für layout-Zwecke, für alle aber die einfachsten layout-Aufgaben.Nun der Unterschied zu deinem Beispiel ist, wie würden Sie verwenden Ihrer Kontrolle. Die
InnerContent
- Eigenschaft ist vom TypUIElement
, was bedeutet, dass es halten kann eineUIElement
. Dies bedeutet, dass Sie benötigen, um ein container-element zum anzeigen von mehr als einem Element, aber es hat das gleiche Ergebnis:Und das Ergebnis:
UPDATE >>>
Für das Protokoll, ich weiß genau, was Sie tun möchten. Sie, so scheint es, nicht verstehen, was ich sage, so werde ich versuchen es zu erklären ein letztes mal für Sie. Hinzufügen eines
Button
mit derTag
- Eigenschaft festgelegt, wie ich Ihnen bereits gezeigt:Fügen Sie nun eine
Click
handler:Das ist alles dort ist zu ihm.
Tag
- Eigenschaft, um diese zu identifizieren:<Button Tag="Button1" ... />
if (button.Tag == "Some name") DoSomething();
?Tag
Immobilie, ALS wäre ES dieName
Eigenschaft:button.Tag = "Some name"
oder<Button Tag="Button1" ... />
.Tag
Eigenschaft gibt es zwei Möglichkeiten. Ihr ursprüngliche code war so:<Button Name="MyButton1" Content="Click" Height="30" Width="50"/>
. Ich sage, dass Sie dies tun können:<Button Tag="MyButton1" Content="Click" Height="30" Width="50"/>
. Bitte setzen Sie Ihre Entdeckungen auf Ihrem eigenen.