我想创建一个LiveTile。将显示的文本来自不同的后端,因此我无法访问或控制。所以我想要预呈现文本(例如:http://developer.nokia.com/community/wiki/Custom_Live_Tile_with_Formatted_Text)。
但是我想更进一步,然后将绳子包裹起来并修剪它,因为它可能会变长。 该代码的简短版本是:
var wbmp = new WriteableBitmap();
var grid = new Grid();
grid.Width = pWidth;
grid.Height = pHeight;
var tblk = new TextBlock();
tblk.Text = pString;
tblk.Width = pWidth; // 691 or 336
tblk.Height = pHeight; // 336
tblk.TextTrimmin = TextTrimming.WordEllipsis;
tblk.TextWrappin = TextWrapping.Wrap;
grid.Children.Add(tblk);
wbmp.Render(grid, null);
wbmp.Invalidate();
这并没有修剪弦乐。然后我读了一些关于网格和文本修改的内容,我已经有了一个xaml-part,它对Wok和Wo都很重要所以我做了这样的事情:
var rowDef = new RowDefinition();
rowDef.Height = GridLength(1, GridUnitType.Auto);
grid.RowDefinitions.Add(rowDef);
rowDef = new RowDefinition();
rowDef.Height = GridLength(1, GridUnitType.Star);
grid.RowDefinitions.Add(rowDef);
tblk.SetValue(Grid.RowProperty, 0); // or 1 // or Grid.SetRow(tblk, 1);
并尝试了行和列,自动,像素和星星的不同组合。但没有任何作用。由于网格不受任何其他限制,因此#34;正在飞行"在虚空中,它不会创建多行。如果我用4种颜色复制相同的文本并将其放在4行中,它只显示上面的一行,因为所有其他文本都在下面...
我在这里缺少什么?在Oo
的同时修剪和包裹是不可能的答案 0 :(得分:1)
您必须调用UIElement
的{{3}}和Measure方法才能真正获得所需的图片。所以这是完整的代码:
var grid = new Grid();
grid.Width = 80;
grid.Height = 80;
var tblk = new TextBlock();
tblk.Text = "Long enough text to show you text wrapping and trimming at the same time in this example.";
tblk.Width = 80;
tblk.Height = 80;
tblk.TextTrimming = TextTrimming.WordEllipsis;
tblk.TextWrapping = TextWrapping.Wrap;
grid.Children.Add(tblk);
grid.Measure(new Size(80, 80));
grid.Arrange(new Rect(0, 0, 80, 80));
grid.InvalidateVisual();
var renderTargetBitmap = new RenderTargetBitmap(80, 80, 96, 96, PixelFormats.Default);
renderTargetBitmap.Render(tblk);
之后,您可以将renderTargetBitmap
用作Source
Image
元素作为{{1}}元素,您将会看到文本被剪裁和包裹。