Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf MessageBox根据文本字符串的大小调整bahavior的大小_Wpf_Wpf Controls_Messagebox - Fatal编程技术网

Wpf MessageBox根据文本字符串的大小调整bahavior的大小

Wpf MessageBox根据文本字符串的大小调整bahavior的大小,wpf,wpf-controls,messagebox,Wpf,Wpf Controls,Messagebox,您好,我正在尝试根据我在WPF中构建的自定义对话框中文本(而不是标题)字符串的大小来实现MessageBox的大小调整。这是我的自定义MessageBox,带有我应用程序的布局 但是MessageBox如何根据字符串的大小自动增加MessageBox的高度呢?怎么做 提前谢谢 在WPF中,您通常使用FormattedText类来微调文本 如果我做对了,你需要的是BuildGeometry方法: 因此,您需要: 创建格式化文本 从中构建几何体 提取边界框 将messagebox的大小调整为此大

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

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


提前谢谢

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

如果我做对了,你需要的是BuildGeometry方法:

因此,您需要:

  • 创建格式化文本
  • 从中构建几何体
  • 提取边界框
  • 将messagebox的大小调整为此大小

    • 我通常是这样做的:

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

      这是有用的窗口,这是我需要的窗口。但是我使用哪个控件来显示文本?我需要一个根据文本长度自动增长的控件。如果文本框能这样做,我不知道怎么做。如果我想让TexBox的宽度不增加,我只需要使用TextWrapping属性。但是如果我想让她长高呢?我不知道MessageBox中使用哪个控件来显示文本……您可以创建一个
      页面作为窗口内容,其中包含
      流程文档
      ,然后可以使用各种块和内联线来显示文本。如果你想包装文本,你需要在容器上设置MaxWidth,否则它只会变宽(通常直到窗口与屏幕一样宽)。实际上,从一个简单的消息框来看,
      FlowDocumentScrollViewer
      可能更合适,我添加了更多的示例代码。但是FlowDocumentScrollViewer能否增长到一定的限制(MaxHeight)与通常的MessageBox一样?如果需要,可以在任何框架元素上设置MaxHeight,包括FlowDocumentScrollViewer。
      <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>