我需要一些帮助确认我发现了一个错误。
我正在xaml为metro创建一个“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
,其中包含不同的文字和FontSize
我无法让VariableSizedWrapGrid
实际拥有“可变大小”的子控件。也许我只是错误地使用这个?
答案 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 :(得分:1)
尝试考虑使用DataTemplate。
VariableSizedWrapGrid提供ItemHeight和ItemWidth属性。然后,您只能选择“在单元格中”项目的宽度和高度。因此,您可以选择适合3个单元格宽度和1个单元格高度的项目。
答案 2 :(得分:1)
改变这个:
DesiredSize.Width.ToString()
对此:
Width.ToString()
布局系统是一个复杂的三遍过程,当您通过在代码中说“DesiredSize”来控制“DesiredSize”值时,布局系统会负责。指定宽度时,将覆盖布局系统。