MessageBox 根据文本字符串的大小调整大小行为

发布于 2024-11-01 20:44:32 字数 170 浏览 0 评论 0原文

您好,我正在尝试根据我在 WPF 中构建的自定义对话框中的文本(不是标题)字符串的大小来实现 MessageBox 调整大小行为。这是我的自定义消息框,带有我的应用程序的布局。

但是 MessageBox 是如何根据字符串的大小自动增长 MessageBox 的高度的呢?怎么做呢?

提前致谢!

Hi i am trying to implement the MessageBox resizing bahavior depending on the size of the Text (not caption) string in a custom DialogBox i am building in WPF. It's my custom MessageBox with the layout of my app.

But how MessageBox does to depending in the size of the string, the height of the MessageBox grows automatically? How to do that?

Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

以酷 2024-11-08 20:44:32

这就是我通常这样做的方式:

<Window SizeToContent="WidthAndHeight" ResizeMode="NoResize" ...>

此外,您可以将 ScrollViewer 作为窗口的子窗口,并设置 MaxHeightMaxHeight 。窗口上的 MaxWidth 属性可进一步限制它。

编辑:给出一个窗口外观的谨慎示例:

<Window
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  SizeToContent="WidthAndHeight"
  ResizeMode="NoResize" MaxWidth="400" MaxHeight="400">
  <Grid>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <Grid.Children>
          <FlowDocumentScrollViewer ScrollViewer.VerticalScrollBarVisibility="Auto">
            <FlowDocument>
                <Paragraph>
                    <Run Text="{Binding DisplayText}"/>
                </Paragraph>
            </FlowDocument>
          </FlowDocumentScrollViewer>

          <StackPanel Grid.Row="1">
            <!-- Buttons -->
          </StackPanel>
    </Grid.Children>
  </Grid>
</Window>

This is how i normally do this:

<Window SizeToContent="WidthAndHeight" ResizeMode="NoResize" ...>

Additionally you could have a ScrollViewer as the child of the window and set the MaxHeight & MaxWidth properties on the window to restrict it further.

Edit: To give a discreet example of what the window might look like:

<Window
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  SizeToContent="WidthAndHeight"
  ResizeMode="NoResize" MaxWidth="400" MaxHeight="400">
  <Grid>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <Grid.Children>
          <FlowDocumentScrollViewer ScrollViewer.VerticalScrollBarVisibility="Auto">
            <FlowDocument>
                <Paragraph>
                    <Run Text="{Binding DisplayText}"/>
                </Paragraph>
            </FlowDocument>
          </FlowDocumentScrollViewer>

          <StackPanel Grid.Row="1">
            <!-- Buttons -->
          </StackPanel>
    </Grid.Children>
  </Grid>
</Window>
羅雙樹 2024-11-08 20:44:32

在 WPF 中,您通常使用 FormattedText 类来微调文本。

如果我做对了,您所需要的正是 BuildGeometry 方法:

http://msdn.microsoft.com/en-us/library/system.windows.media.formattedtext.buildgeometry.aspx

因此您需要:

  • 创建格式化文本
  • 从中构建几何图形
  • 提取边界框
  • 将消息框调整为该框大小

In WPF you usually use the FormattedText class to finetune text.

What you need exactly if I got it right is the BuildGeometry method:

http://msdn.microsoft.com/en-us/library/system.windows.media.formattedtext.buildgeometry.aspx

So you need:

  • Create you formatted text
  • Build the geometry from it
  • Extract the bounding box
  • Resize you messagebox to this box size
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文