/ / Xaml wie man die Anzahl der Spalten im selben Raster ändert, um TextBlock anzuzeigen - .net, xaml, datagrid, grid, silverlight-5.0

Xaml wie man die Anzahl der Spalten im selben Raster ändert um TextBlock anzuzeigen - .net, xaml, datagrid, grid, silverlight-5.0

Ich bin Silverlight Xaml und c # Anfänger. Ich habe eine Verschachtelungssituation, in der ich einen Textblock mit 1 Spalte innerhalb des Textblocks mit 2 Spalten im Raster anzeigen möchte. Die Sicht muss so sein:

Bildbeschreibung hier eingeben

Sie können sehen, dass es einen kleinen Algo dafür gibt:

Grid
{
2 columns for first 3 TextBlock from row 0 to 2
Only 1 column for the third row // I do so because here the data inside will be more(not able to cover in 1 line)
Again 2 columns for third TextBlock
}

Was ich versucht habe:

<Grid Width="300">
<Grid.RowDefinitions>
<RowDefinition Height="20" />
<RowDefinition Height="20" />
<RowDefinition Height="20" />
<RowDefinition Height="20" />
<RowDefinition Height="20" />
<RowDefinition Height="" />
<RowDefinition Height="20" />
<RowDefinition Height="20" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="Name" />
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Name}" />

<TextBlock Grid.Row="1" Grid.Column="0" Text="Author" />
<TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Author}" />

<TextBlock Grid.Row="2" Grid.Column="0" Text="Date of Creation" />
<TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding DateCreation}" />

<TextBlock Grid.Row="3" Grid.Column="0" Text="Company" />
<TextBlock Grid.Row="3" Grid.Column="1" Text="{Binding Company}" />

<TextBlock Grid.Row="4" Grid.Column="0" Text="Description" />
<TextBlock Grid.Row="4" Grid.Column="1" Text="{Binding Description}" />

<!--TextBlock  Grid.Row="4" Grid.Column="1" Text="{Binding Description}"/>-->

<TextBlock Grid.Row="6" Grid.Column="0" Text="DocUrl" />
<TextBlock Grid.Row="6" Grid.Column="1" Text="{Binding DocUrl}" />

<TextBlock Grid.Row="7" Grid.Column="0" Text="ProgramId" />
<TextBlock Grid.Row="7" Grid.Column="1" Text="{Binding ProgramId}" />

</Grid>

Wie erreiche ich es mit Xaml?

Bitte nicht, dass ich in Silverlight 5 arbeite

Antworten:

1 für die Antwort № 1

Sie können eine Eigenschaft namens Spaltenspanne festlegen. Das bedeutet, dass das Element, auf das Sie es anwenden, "überspannt" oder so breit wie die Anzahl der Spalten ist, die Sie angeben. Beachten Sie, dass Sie dies auch mit Gittern tun können. Ändern Sie beispielsweise den XAML-Code Ihres Beschreibungslabel-Textblocks und des gebundenen Beschreibungs-Textfelds wie folgt:

<TextBlock Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" Text="Description"/>
<TextBlock Grid.Row="4" Grid.Column="1" Grid.ColumnSpan="2" Text="{Binding Description}"/>

Dies sollte diese Elemente auf die Breite von 2 Spalten erstrecken. Ich hoffe das hilft!

Bearbeiten: Nach weiterer Überlegung würde ich dich vorstellenDer Text "Description:" soll immer noch enthalten sein, aber nur in einer Box. Um dies zu tun, müssen Sie C # -Code verwenden, da Silverlight nur eine Textbox an eine Sache binden lässt. Stattdessen würde ich nur verwenden:

 <TextBlock Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" Text="{Binding DescriptionWithLabel}"/>

und in der C #, an die Sie gebunden sind:

public string DescriptionWithLabel
{
return string.Format("{0} {1}", "Description: ", Description.ToString);

}

** Edit: ** Ok, nach deinen letzten Kommentaren würde ich vorschlagen, das DiscriptionWithLabel im C # -Code hinterher zu verwerfen und stattdessen mit einem Stackpanel zu gehen, das ein Label und ein Textfeld enthält. Wie so:

        <StackPanel Grid.ColumnSpan="2" Orientation="Horizontal" HorizontalAlignment="Stretch" Margin="0,0,0,0" Grid.Row="4" VerticalAlignment="Stretch">
<TextBlock Content="Description: "/>
<TextBox HorizontalAlignment="Stretch" Width="auto" MinWidth="20" TextWrapping="Wrap" Max Width="60"/>
</StackPanel>

2 für die Antwort № 2

Sie müssen einstellen ColumnSpan="2"

<TextBlock Grid.ColumnSpan="2" ... />