UserControl oder was?
-
Hallo zusammen.
Also. Ich habe mir ein Konstrukt in XAML gebaut, das mir ein Label und eine Textbox auf eine gewisse Art anzeigt.
Nun würde ich das ganze gerne wieder verwenden. Also so eine Art HeaderContent Control.
Wo packe ich das Konstrukt nun rein, dass ich es wieder verwenden kann.
In ein UserControl? Mir fehlt nichts anderes ein.Da ich das ganze aber ziemlich oft benötige. Also für ein Formular. Habe ich dann auf einer Seite sehr viele Instanzen dieses UserControl.
Und da ich mal gehört habe, das UserControls die Anwendung langsam macht, suche ich eine Alternative.
Kann mir jemand helfen.
-
Du kannst dir auch ein Template in den Ressourcen anlegen, um dein Problem zu lösen.
-
Richtig. Aber wie?
Was muss ich da für ein Template nehmen und wie muss ich das dann anwenden?
-
Guten Morgen,
ungefähr so könnte man das ganze handhaben (ungetestet):
<Window [...]> <Window.Resources> <DataTemplate x:Key="MyTemplate"> <Label> <TextBlock Text="MyText" /> </Label> <TextBox Text="" Width="50"/> </DataTemplate> </Window.Resources> <Grid> <GroupBox HeaderTemplate="{StaticResource MyTemplate}"> </GroupBox> </Grid> </Window>
-
Wieso ein Datentemplate??
Wieso eine GroupBox?
-
Die Frage stellt sich doch:
Brauche ich ein UserControl. Oder ein CustomControl, dass ich von HeaderedContentControl ableite. Oder?
-
Da du beide Elemente in XAML gleich einbindest, kannst du die Entscheidung erstmal zurückstellen. Ich würde es zuerst mit dem UserControl machen, da du dort auch einfacher den Style ändern kannst und sofort ein visuelles Feedback bekommst. Beim Customcontrol hast du den Style nur in einer Resourcendatei und änderst ohne Ansicht im WPF Designer.
Wegen der Performance kannst du dir dann Gedanken machen wenn sie schlecht ist, vorher würde ich auf solche allgemeinen Aussagen nicht allzu viel geben, wer weiß ob bei dem Benchmark nicht einfach mal 100.000 Usercontrols bzw. Custom Controls angelegt wurden, das ist für deinen Fall wo du wahrscheinlich maximal 100 von den Elementen hast völlig unerheblich.mfG
KaPtainCugel
-
Dank dir KPC. So habe ich das nun mal gemacht.
Da habe ich dann noch eine Frage. Und zwar habe ich DependencyPropertys angelegt.
z.B. LabelBrush, über den ich mir dann von aussen den Hintergund hinterm Label setzen kann.
Das funktioniert nun auch. Was ich aber nicht hinbekomme. Wie setze ich den einen Standardwert für den Hintergrund? Also wenn er von aussen nicht gesetzt wird.
-
public static readonly System.Windows.DependencyProperty TestProperty = System.Windows.DependencyProperty.Register("Test", typeof (string), typeof (...), new PropertyMetadata("Hier steht der Initialwert")); public string Test { get { return (string) GetValue(TestProperty); } set { SetValue(TestProperty, value); } }
Die letzte Eigenschaft beim deklarieren der DependencyProperty gibt den Default-Wert an.
-
Ja das weiß ich.
Das Problem ist ja aber dass ich den Initialwert in XAML definieren möchte.
Wie macht man dann das?