c# - Stackpanel 中的自动调整大小和居中文本 block

标签 c# .net silverlight textblock stackpanel

我目前正在致力于将文本 block 动态插入 Stackpanel。这必须进行多次,并且无法事先知道 Stackpanel 的大小。

目前,我有这样的东西:

    TextBlock tmp = new TextBlock {
                                      Text = curField.FieldName,
                                      Foreground = new SolidColorBrush(Colors.Red),
                                      HorizontalAlignment = HorizontalAlignment.Center,
                                      VerticalAlignment = VerticalAlignment.Center
                                  };
    tmp.MouseLeftButtonUp += imgFormImage_MouseLeftButtonUp;
    curField.assocStackpanel.Children.Add(tmp);
    curField.assocStackpanel = curField.assocStackpanel;
    SelectedFields.Add(curField);

现在,文本 block 只是在 Stackpanel 中水平居中显示,而不是垂直居中。所以我需要解决这个问题。此外,理想情况下,我希望能够动态确定文本 block 的字体大小,以便它填充可用空间。现在我认为它只是采用默认值(我相信)10。

最佳答案

我决定采用以下方法:

    double xpos = Canvas.GetLeft(curField.assocGrid);
    double ypos = Canvas.GetTop(curField.assocGrid);
    double width = curField.assocGrid.Width;
    double height = curField.assocGrid.Height;

    TextBlock tmp = new TextBlock {
                                      Text = curField.FieldName,
                                      Foreground = new SolidColorBrush(Colors.Red),
                                      HorizontalAlignment = HorizontalAlignment.Center,
                                      VerticalAlignment = VerticalAlignment.Center,
                                      FontSize = 30
                                  };
    Grid grd = new Grid();
    grd.Children.Add(tmp);
    Viewbox vb = new Viewbox();
    vb.Child = grd;
    vb.Width = width;
    vb.Height = height;
    cvsCenterPane.Children.Add(vb);
    Canvas.SetLeft(vb, xpos);
    Canvas.SetTop(vb, ypos);
    curField.scaleViewbox = vb;
    SelectedFields.Add(curField);

首先将文本 block 包裹在网格中,然后将生成的网格包裹在 View 框中。我们得到一个初始的 1:1 比例。然后通过改变 View 框的尺寸,我们可以获得所需的结果填充。我希望我能做但找不到方法的一件事是将生成的文本在缩放的 View 框内居中。现在,即使 View 框左侧有空间,它也会左对齐。我不确定这是什么原因。

关于c# - Stackpanel 中的自动调整大小和居中文本 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6331066/

相关文章:

c# - 如何根据SessionID恢复Session?

c# - 使用方法名称的属性

c# - Dotfuscator 是如何工作的?

c# - 识别笔记本电脑屏幕

c# - Windows Phone 7 中的 HttpUtility.UrlEncode?

c# - 创建 WCF Rest 服务以接受 SAML 并对 Windows 用户进行身份验证

.net - 我应该在下一个 Web 应用程序开发中使用 WPF 还是 ASP.NET?

silverlight - Silverlight 的 BindingBase.Delay

visual-studio - 无法使用 VS2010 附加到 Silverlight 应用程序

c# - 实现非地球日历