【问题标题】:Xaml how to change the number of columns in same grid to display TextBlockXaml如何更改同一网格中的列数以显示TextBlock
【发布时间】:2014-04-24 12:39:50
【问题描述】:

我是 silverlight xaml 和 c# 初学者。我有一个嵌套情况,我想在文本块内显示一个文本块,其中 1 列在网格中,2 列。视图必须是这样的:

你可以看到它有一个小的算法:

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 
 }

我尝试了什么:

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

如何使用 Xaml 实现?

请不要说我在 Silverlight 5 中工作

【问题讨论】:

    标签: .net xaml datagrid grid silverlight-5.0


    【解决方案1】:

    你必须设置ColumnSpan="2"

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

    【讨论】:

    • @Martin 请多解释一下。它有什么作用?
    • 我的意思是我应该如何编辑我的 Xaml 代码以使第三行只有 1 列?
    • @user234839:您可以在您的Grid 中的任何元素上设置ColumnSpan 来表示:该元素应涵盖这么多列。因此,将此 ColumnSpan 设置为第三行中的所有元素。
    • 它有效,但我遇到了问题。如果我写的文本比文本块的大小还要长怎么办。它将显示不完整的字符串。简而言之,我想根据描述绑定动态地增加这个文本块的大小,并且大小应该增长到足以容纳所有字符串。假设我使用文本框而不是文本块,因为在字符串周围有一个框更漂亮。那么如何增加这个测试框的大小以适应所有字符串呢?
    • @user234839 使用 Textbloxk 的 TextWrapping 属性进行换行,然后内容将被换行在网格行内。
    【解决方案2】:

    您可以设置一个名为 Column span 的属性。这意味着您应用它的元素将“跨越”或与您指定的列数一样宽。请注意,您也可以使用网格来执行此操作。例如,将描述标签文本块和绑定描述文本框的 xaml 代码更改为以下内容:

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

    这应该将这些元素拉伸到 2 列的宽度。我希望这会有所帮助!

    编辑:经过进一步考虑,我想您希望仍然包含“描述:”文本,但仅包含在一个框中。为此,您必须使用 C# 代码,因为 silverlight 只会让文本框绑定到一件事。所以我只会使用:

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

    在您要绑定的 C# 中:

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

    **编辑:**好的,在您最近的 cmets 之后,我建议在后面的 C# 代码中废弃 DiscriptionWithLabel,而是使用包含标签和文本框的堆栈面板。像这样:

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

    【讨论】:

    • 它起作用了,但我遇到了问题。如果我写的文本比文本块的大小还要长怎么办。会显示不完整的字符串。
    • 简而言之,我想根据描述符绑定动态地增加这个文本块的大小,并且大小应该增长到足以容纳所有字符串。假设我使用文本框而不是文本块,因为在字符串周围有一个框更漂亮。那么如何增加这个测试框的大小以适应所有字符串呢?
    • 感谢最近的更新。为什么不网格?为什么要堆叠面板?
    • 错误 1 ​​名称“标签”在命名空间“schemas.microsoft.com/client/2007”中不存在。
    • 我正在使用 silverligth 5
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多