3

我需要一些帮助来确认我看到了一个错误。

我正在为 Metro 的 xaml 创建一个“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添加对象时,它们基本上是剪辑的,它们都锁定到一个单一的大小(基本上是 a 的行为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真正拥有“可变大小”的子控件。也许我只是使用这一切都错了?

4

3 回答 3

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
于 2014-11-24T19:40:41.973 回答
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

于 2012-07-09T15:22:59.507 回答
1

改变这个:

DesiredSize.Width.ToString() 

对此:

Width.ToString()

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

于 2014-11-23T07:00:55.087 回答