【问题标题】:WPF: Textblock text in Popup goes outside of the main windowWPF:弹出窗口中的文本块文本超出主窗口
【发布时间】:2025-01-06 21:55:01
【问题描述】:

在我的示例 wpf 应用程序中,我向窗口添加了一个按钮和一个弹出窗口。该按钮位于右下角,弹出窗口已将“PlacementTarget”属性设置为它并将“Placement”设置为顶部。弹出窗口由一个很长的文本块组成。

我期望这个弹出窗口的行为不会超出窗口,因此会自动将他的“Horizo​​ntalOffset”设置为适当的值,但弹出窗口的行为违背了我的意图。

这是我的 xaml 文件:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplication1" x:Name="window" x:Class="WpfApplication1.MainWindow"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <local:Converters x:Key="Converters"/>
</Window.Resources>
<Grid>
    <Button x:Name="button" Content="Button" VerticalAlignment="Bottom" Width="75" HorizontalAlignment="Right"/>
    <Popup Placement="Top" PlacementTarget="{Binding ElementName=button, Mode=OneWay}" IsOpen="True">
        <TextBlock TextWrapping="Wrap" Text="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" Background="White"/>
    </Popup>
</Grid>

有人知道怎么解决吗? 我读过这应该是默认的弹出行为,以照顾超出边界,但在我的情况下不是。提前致谢。

【问题讨论】:

  • 这不适用于Popup,但您可以将TextBlock.TextTrimming 用于TextBlock。引用自 MSDN:Gets or sets the text trimming behavior to employ when content overflows the content area..
  • 我只在这个例子中使用了 TextBlock。在实际情况下,Popup 的内容将是带有一些按钮的堆栈面板。

标签: wpf popup


【解决方案1】:

您是否尝试过设置 Popup 或 Textblock 的宽度?

对不起,我不能把这个糟糕的答案写成评论..

【讨论】:

  • 此属性必须设置为“auto”,因为用户可以通过原始应用中的另一个按钮放大和缩小整个内容。编辑:我可以将它设置为按钮的宽度,但是当弹出窗口有大量内容并且需要很宽时,这是一个丑陋的解决方案。
  • 另一个愚蠢的答案:你试过 Horizo​​ntalalignment="right" 吗?