7 Stimmen

C# User Control, das andere Controls enthalten kann (wenn es verwendet wird)

Ich habe etwas über dieses Thema für ASP gefunden, aber es hat mir nicht viel geholfen ...

Ich würde gerne Folgendes tun: Ich möchte eine Benutzersteuerung erstellen, die eine Sammlung als Eigenschaft und Schaltflächen zum Navigieren durch diese Sammlung hat. Ich möchte in der Lage sein, diese Benutzersteuerung an eine Sammlung zu binden und verschiedene Steuerelemente darauf anzuzeigen (die Daten aus dieser Sammlung enthalten). So wie in MS Access am unteren Rand eines Formulars ...

um genauer zu sein:

Wenn ich das Steuerelement in meiner Anwendung verwende (nachdem ich es erstellt habe), möchte ich ihm mehrere Steuerelemente hinzufügen können (Textfelder, Beschriftungen usw.), die zwischen dem <myControly> y </mycontrol> Wenn ich das jetzt tue, verschwinden die Steuerelemente auf meiner Benutzersteuerung.

10voto

Nir Punkte 28685

Hier ist ein Beispiel für eine Möglichkeit, das zu tun, was Sie wollen:

Zunächst der Code - UserControl1.xaml.cs

public partial class UserControl1 : UserControl
{
    public static readonly DependencyProperty MyContentProperty =
        DependencyProperty.Register("MyContent", typeof(object), typeof(UserControl1));

    public UserControl1()
    {
        InitializeComponent();
    }

    public object MyContent
    {
        get { return GetValue(MyContentProperty); }
        set { SetValue(MyContentProperty, value); }
    }
}

Und die XAML der Benutzersteuerung - UserControl1.xaml

<UserControl x:Class="InCtrl.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300" Name="MyCtrl">
    <StackPanel>
        <Button Content="Up"/>
        <ContentPresenter Content="{Binding ElementName=MyCtrl, Path=MyContent}"/>
        <Button Content="Down"/>
    </StackPanel>
</UserControl>

Und schließlich die Xaml-Datei zur Verwendung unseres wunderbaren neuen Steuerelements:

<Window x:Class="InCtrl.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:me="clr-namespace:InCtrl"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <me:UserControl1>
            <me:UserControl1.MyContent>
                <Button Content="Middle"/>
            </me:UserControl1.MyContent>
        </me:UserControl1>
    </Grid>
</Window>

1voto

Greg D Punkte 41958

Es fällt mir schwer, Ihre Frage zu verstehen, aber ich denke, was Sie beschreiben, ist eine ItemsControl mit DataTemplates um den Inhalt einer (vermutlich) ObservableCollection(T) .

0voto

Joe White Punkte 90737

Ein UserControl ist möglicherweise nicht der beste Weg, dies zu tun. Sie wollen Dekorationen um den Inhalt hinzufügen, was im Grunde das ist, was Border tut: es hat ein Kind Element, und es fügt seine eigenen Sachen um die Kanten.

Sehen Sie sich die Klasse Decorator an, von der Border abstammt. Wenn Sie Ihre eigene Border-Abkömmling, sollten Sie leicht in der Lage sein, zu tun, was Sie wollen. Allerdings glaube ich, dies würde das Schreiben von Code, nicht XAML erfordern.

Vielleicht möchten Sie trotzdem ein UserControl erstellen, um die Schaltflächen am unteren Rand zu umschließen, damit Sie den visuellen Designer für einen Teil des Prozesses verwenden können. Aber Decorator wäre ein guter Weg, um die Stücke zusammen zu kleben und ermöglichen für Benutzer-definierbare Inhalte.

0voto

stricq Punkte 667

Hier ist ein Link auf ein eingebautes Steuerelement ( HeaderedContentControl ), das dasselbe tut wie die akzeptierte Antwort, außer dass es ein bestehendes Steuerelement in WPF seit .Net 3.0 ist

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X