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:
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 № 1Sie 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" ... />