设置后面的TextBlock的宽度,高度为variablesizedwrapgrid无法正确显示

时间:2012-07-09 03:23:26

标签: c# .net xaml windows-8 microsoft-metro

我需要一些帮助确认我发现了一个错误。

我正在xaml为metro创建一个“TagCloud”。没什么复杂的,应该很简单。

我在后面的代码中创建了TextBlock个对象,然后将它们添加到VariableSizedWrapGrid

的子代中

每个TextBlock的高度和宽度都不同 - 这取决于testblock.Measure(size),然后通过DesiredSize.WidthDesiredSize.Height设置宽度和高度

testblock.Measure(new Size(10000, 250));
        dWidth = Double.Parse(testblock.DesiredSize.Width.ToString());
        dHeight = Double.Parse(testblock.DesiredSize.Height.ToString());

问题是,当添加TextBlock个对象时,它们基本上是剪辑,它们都锁定到一个单一大小(基本上是WrapGrid的行为)。基本上VariableSizedWrapGrid拒绝允许其子元素中的变量高度和宽度?我不知道为什么会剪辑所有内容。

<VariableSizedWrapGrid x:Name="vswg" Orientation="Horizontal" Width="Auto" Height="200" Grid.Column="1"/>

IEnumerable<TextBlock> textBlocks = 
    (from cloudItem in cloudItems 
     select ConvertToTextBlock(cloudItem, fontWeight));

vswg.Children.Clear();

foreach (TextBlock t in textBlocks)
{
    vswg.Children.Add(t);
}

ConvertToTextBlock()会返回一个新的TextBlock,其中包含不同的文字和FontSize

我无法让VariableSizedWrapGrid实际拥有“可变大小”的子控件。也许我只是错误地使用这个?

3 个答案:

答案 0 :(得分:4)

尝试这样的事情:

 <GroupStyle.Panel> <ItemsPanelTemplate > <VariableSizedWrapGrid x:Name="MyGrid" Orientation="Horizontal" MaximumRowsOrColumns="7"

ItemWidth="{Binding DataContext.ItemTemplateWidth, ElementName=pageRoot}"

ItemHeight="{Binding DataContext.ItemTemplateHeight, ElementName=pageRoot}"

></VariableSizedWrapGrid> </ItemsPanelTemplate> </GroupStyle.Panel> 

还请考虑阅读:

  1. http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2012/09/14/windows-8-xaml-and-displaying-multiple-sized-items.aspx
  2. http://www.acnenomor.com/3756161p1/how-to-display-gridview-items-with-variable-width-in-window-8

答案 1 :(得分:1)

尝试考虑使用DataTemplate。

VariableSizedWrapGrid提供ItemHeight和ItemWidth属性。然后,您只能选择“在单元格中”项目的宽度和高度。因此,您可以选择适合3个单元格宽度和1个单元格高度的项目。

您应该考虑阅读:http://blogs.u2u.be/diederik/post/2012/03/07/Databinding-to-the-VariableSizedWrapGrid-in-Windows-8-Metro.aspx

答案 2 :(得分:1)

改变这个:

DesiredSize.Width.ToString() 

对此:

Width.ToString()

布局系统是一个复杂的三遍过程,当您通过在代码中说“DesiredSize”来控制“DesiredSize”值时,布局系统会负责。指定宽度时,将覆盖布局系统。