C# 设置variablesizedwrapgrid代码后面文本块的宽度和高度未正确显示

C# 设置variablesizedwrapgrid代码后面文本块的宽度和高度未正确显示,c#,.net,xaml,windows-8,microsoft-metro,C#,.net,Xaml,Windows 8,Microsoft Metro,我需要一些帮助来确认我看到了一个bug 我正在用xaml为metro创建一个“TagCloud”。没有什么复杂的,它应该是简单的 我在代码隐藏中创建TextBlock对象,然后将它们添加到VariableSizedWrapGrid 每个TextBlock都有不同的高度和宽度-这由测试块决定。测量(大小),然后通过DesiredSize.width和DesiredSize.height设置宽度和高度 testblock.Measure(new Size(10000, 250));

我需要一些帮助来确认我看到了一个bug

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

我在代码隐藏中创建
TextBlock
对象,然后将它们添加到
VariableSizedWrapGrid

每个
TextBlock
都有不同的高度和宽度-这由
测试块决定。测量(大小)
,然后通过
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 textBlocks=
(来自cloudItems中的cloudItem)
选择ConvertToTextBlock(cloudItem,fontWeight));
vswg.Children.Clear();
foreach(文本块中的文本块t)
{
vswg.Children.Add(t);
}
ConvertToTextBlock()
返回具有不同文本和字体大小的新
TextBlock


我无法使
VariableSizedWrapGrid
实际具有“可变大小”子控件。也许我只是用错了?

试着考虑使用DataTemplate

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

你应该考虑阅读:

改变这个:

DesiredSize.Width.ToString() 
为此:

Width.ToString()

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

试试这样的方法:

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

<强>也考虑阅读:

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

  • 我以前检查过这个解决方案。。。问题是columnspan{binding width}是未定义的变量。。。“cloudtag”中显示的文本可以是任何未定义的长度-因为fontsize可以通过“count”进行更改,这并不实际。这是可行的(如果你定义了一个固定的列跨度),但我想把wrapgrid当作一个wpf wrappanel,只需在它上面放置一个控件,然后在它旁边放置另一个控件-没有对齐,没有大小调整等。我只想将这个控件写到另一个winrt限制。就像style.triggers(我真的希望返回)一样,使用未设置的宽度不是一个好的做法:您将失去VariableSizedWrapGrid的“Virutal”属性。防止定义宽度项目。如果有许多项,则渲染时间太长。您可以尝试将“包装面板”从Silverlight toolkit移植到WinRT。@ToddMain,因此为了简化,您只需要一个标记云,可以为每个项提供一个itemsource,并为每个项指定不同的字体大小?