/ / Xaml como alterar o número de colunas na mesma grade para exibir TextBlock - .net, xaml, datagrid, grid, silverlight-5.0

Xaml como alterar o número de colunas na mesma grade para exibir TextBlock - .net, xaml, datagrid, grid, silverlight-5.0

Eu sou praticante xaml e c # iniciante. Eu tenho uma situação de aninhamento onde eu quero exibir um bloco de texto com uma coluna dentro do bloco de texto com 2 colunas na grade. A visão deve ser assim:

insira a descrição da imagem aqui

Você pode ver que há algo pequeno para isso:

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
}

O que eu tentei:

<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>

Como conseguir isso usando o Xaml?

Por favor, não que eu estou trabalhando no silverlight 5

Respostas:

1 para resposta № 1

Você pode definir uma propriedade chamada Extensão de coluna. Isso significa que o elemento ao qual você está aplicando será "span" ou será tão amplo quanto o número de colunas que você especificar. Note que você também pode fazer isso com grades também. Para o seu exemplo, altere o código xaml do bloco de texto do rótulo de descrição e a caixa de texto de descrição do limite para o seguinte:

<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}"/>

Isso deve esticar esses elementos para a largura de 2 colunas. Eu espero que isso ajude!

Editar: Após uma análise mais aprofundada, eu imaginaria vocêdeseja que o texto "Descrição:" continue incluído, mas apenas em uma caixa. Para fazer isso você teria que usar o código C # para trás, pois o silverlight só permitiria que uma caixa de texto fosse ligada a uma coisa. Então, eu usaria apenas:

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

e no C # que você está ligando para:

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

}

** Edit: ** Ok, depois de seus comentários mais recentes, sugiro que o código DiscriptionWithLabel seja desfeito no código C # e, em vez disso, use um stackpanel que contenha um rótulo e uma caixa de texto. Igual a:

        <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 para resposta № 2

Você tem que definir ColumnSpan="2"

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