【发布时间】:2012-07-09 03:23:26
【问题描述】:
我需要一些帮助来确认我发现了错误。
我正在为 Metro 的 xaml 创建一个“TagCloud”。没什么复杂的,应该很简单。
我在后面的代码中创建TextBlock 对象,然后将它们添加到VariableSizedWrapGrid 的子对象中
每个TextBlock都有不同的高度和宽度——这由testblock.Measure(size)决定,然后通过DesiredSize.Width和DesiredSize.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,带有不同的文本和字体大小
我无法让VariableSizedWrapGrid 实际上拥有一个“可变大小”的子控件。也许我只是用错了?
【问题讨论】:
-
您可以尝试将包装面板从 Silverlight 工具包移植到 WinRT。
-
@ToddMain,为了简化,您只需要一个标签云,您可以使用 itemsource 提供并为每个项目分配不同的字体大小?
标签: c# .net xaml windows-8 microsoft-metro