.NET GUI

.NET Community rund um alle Graphical User Interface (GUI) Themen.
Willkommen bei .NET GUI. Anmeldung | Registrieren | Hilfe | Impressum | Forumsregeln
in Suchen

Template für ein Grid

Letzter Beitrag 11-02-2008 12:31 von theVisualDeveloper. 5 Antworten.
Seite 1 von 1 (6 Treffer)
Beiträge sortieren: Zurück Weiter
  • 10-04-2008 16:02

    • accelle
    • Top 10 Mitwirkender
    • Registriert am 08-08-2008
    • Beiträge 68
    • Punkte 1.105

    Template für ein Grid

    Hallo,

    ich möchte gerne ein Template für ein Grid anlegen, das ich dann bei Bedarf einfach irgendwo einbauen kann. Am liebsten wäre es mir, ich könnte die Breite der Spalten (je Spalte) und die Höhe der Zeilen (einmal für alle) definieren. Wenn es so nicht geht, dann auch jede Zeile für sich.

    Jetzt bin ich zwar in der Lage, ein DataTemplate für ein Grid zu definieren, aber ich weiß nicht, wie ich es auf mein Window bekomme. Blöd, oder?

    Danke vorab für alle Hinweise

    Gruß
    Peter

    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 10-07-2008 10:21 Antwort zu

    • joachimk
    • Top 25 Mitwirkender
      Männlich
    • Registriert am 04-11-2008
    • Salzburg, Austria
    • Beiträge 24
    • Punkte 391

    AW: Template für ein Grid

    Hallo Peter,

    wenn du schon ein datatemplate hast, dann kannst du es folgendermaßen explizit irgendwo darstellen

    <ContentPresenter ContentTemplate="{DynamicResource MyDataTemplate}" Content="{Binding}"/>
    vielleicht hilft dir das ja weiter,
    gruss
    j.
    http://blog.joachim.at
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 10-08-2008 10:19 Antwort zu

    • accelle
    • Top 10 Mitwirkender
    • Registriert am 08-08-2008
    • Beiträge 68
    • Punkte 1.105

    AW: Template für ein Grid

    Hallo Joachim,

    danke für den Hinweis. Das wusste ich bisher nicht.

    Ist aber leider noch nicht die finale Lösung. Mein Template definiert nämlich nur die Rows und Columns für das Grid. Damit die immer gleich groß und gleich viele sind etc wollte ich das mit dem Template machen. Der Inhalt soll dann bei der Verwendung gesetzt werden, also z.B. folgendermaßen:
        <ContentPresenter ContentTemplate="{DynamicResource GridBase}" Content="{Binding}">
    
    <TextBox Text="{Binding UpdateSourceTrigger=PropertyChanged, XPath=@Name}" Grid.Row="1" Grid.Column="1" x:Name="TB_Sportart" Style="{DynamicResource TextBoxErrorAlsFehler}" TextChanged="TB_Sportart_TextChanged"/> <TextBlock Text="Sportart:" Grid.Row="1" Grid.Column="0" FontWeight="{Binding Path=IsFocused, Converter={StaticResource Bool2WeightConverter}, ElementName=TB_Sportart}" Style="{StaticResource TextBlockNormal}" VerticalAlignment="Center" /> </ContentPresenter>
    Hier kriege ich jetzt aber den Fehler, dass ein ContentPresenter keinen direkten Inhalt haben darf. Gibts da einen Ausweg oder gibt es für meinen Fall dann keine Lösung?

    Gruß
    Peter

    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 10-23-2008 18:27 Antwort zu

    AW: Template für ein Grid

    Hallo Peter,
    die einfachste und sehr flexible Variante um eine einheitliche Größe für die Rows und Columns zu gewährleisten wäre die Verwendung von  Styles als Resourcen.
    Diese kannst du wahlweise Typisiert dh. für alle Rows und Columns allgemeingültig oder explizit unter Verwendung von x:Key verwenden

    Beispiel :


    ...

    <Window.Resources>

            <Style TargetType="{x:Type ColumnDefinition}">
                <Setter Property="Width" Value="50"/>
            </Style>
            <Style TargetType="{x:Type RowDefinition}">
                <Setter Property="Height" Value="*"/>
            </Style>
           
            <Style TargetType="{x:Type RowDefinition}" x:Key="SomeName">
                <Setter Property="Height" Value="20"/>
            </Style>
           
        </Window.Resources>

            <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="Auto" ShowGridLines="True">
                <Grid.RowDefinitions>
                    <RowDefinition/>
                    <RowDefinition Style="{StaticResource SomeName}"/>
                    <RowDefinition/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition/>
                    <ColumnDefinition/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
            </Grid>

    ...

    Im Hinblick auf die Row bzw. ColumnDefinitions, dh. Anzahl von Rows und Columns gibt es keine so unmittelbare Lösung.

    Für den Fall das die Anzahl der Rows und Columns bekannt ist und es lediglich um Vereinheitlichung bzw. um Vereinfachung der Verwendung geht dh. du sowas wie eine "MasterPage" bauen
    möchtest, schau  dir mal diesen ziemlich guten Blogeintrag an.

    Im Falle das die Anzahl dynamisch erzeugbar sein soll, wäre dann ein bisschen Code zu schreiben.
    Das könnte im einfachsten Falle so aussehen:



        class DynamicGrid: Grid
        {

            public DynamicGrid()
            {
                Initialized += new EventHandler(DynamicGrid_Initialized);
            }

            public static readonly DependencyProperty RowCountProperty = DependencyProperty.Register(
              "RowCount", typeof(int), typeof(DynamicGrid), new PropertyMetadata(0));

            public int RowCount
            {
                get { return (int)this.GetValue(RowCountProperty); }
                set { this.SetValue(RowCountProperty, value); }
            }


            public static readonly DependencyProperty ColumnCountProperty = DependencyProperty.Register(
              "ColumnCount", typeof(int), typeof(DynamicGrid), new PropertyMetadata(0));

            public int ColumnCount
            {
                get { return (int)this.GetValue(ColumnCountProperty); }
                set { this.SetValue(ColumnCountProperty, value); }
            }



            void DynamicGrid_Initialized(object sender, EventArgs e)
            {
                for (int i = 0; i < RowCount; i++)
                {
                    this.RowDefinitions.Add(new RowDefinition());
                }
                for (int i = 0; i < ColumnCount; i++)
                {
                    this.ColumnDefinitions.Add(new ColumnDefinition());
                }
            }
     
        }



    Das dazugehörige XAML beispielsweise:
    ....
    xmlns:ctr="clr-namespace:DynamicGridTest"
    ...
     <ctr:DynamicGrid ShowGridLines="True" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" RowCount="5" ColumnCount="10">
            <Rectangle Fill="Green" Width="50" Height="50"/>
            <Rectangle Fill="Red" Width="50" Height="50" Grid.Column="3" Grid.Row="3"/>
              ...       
       </ctr:DynamicGrid>



    Happy Coding!

    Gruß
    Boris
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 10-28-2008 18:05 Antwort zu

    • accelle
    • Top 10 Mitwirkender
    • Registriert am 08-08-2008
    • Beiträge 68
    • Punkte 1.105

    AW: Template für ein Grid

    Hallo Boris,

    danke für Deinen Hinweis. Dass ich ein Style auch für eine GridRow oder GridColumn definieren kann, wusste ich bislang gar nicht. Blöd was?

    Das Thema Masterpage interessiert mich. Du sprichst von einem Blogeintrag, hast aber wohl den Link dazu vergessen. Könntest Du den noch nachreichen?

    Danke nochmals!

    Gruß
    Peter
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 11-02-2008 12:31 Antwort zu

    AW: Template für ein Grid

    Hi,
    oops...übersehen...hier der Nachschlag:

    http://blogs.interknowlogy.com/bradcunningham/archive/2007/11/21/22690.aspx

    Gruß
    Boris
    • Beitragspunkte: 5
    • IP-Adresse ist Registriert
Seite 1 von 1 (6 Treffer)
Powered by Community Server (Commercial Edition)    Hosting powered by 69° media solutions