【问题标题】:XAML Textblock cannot be centeredXAML 文本块不能居中
【发布时间】:2017-07-31 21:18:25
【问题描述】:

我的 XAML 中有一个 PopUp 元素,里面有一个带有 TextBlock 的 Grid。

现在的问题是,文本和网格不能通过水平和垂直对齐来居中...

XAML

<Popup x:Name="Popup" Height="30px" VerticalAlignment="Top">
      <Grid Height="30px" 
            Background="Green" 
            Width="{Binding ActualWidth, ElementName=Popup}">
            <TextBlock VerticalAlignment="Center" 
                       HorizontalAlignment="Center" 
                       Foreground="White" 
                       Text="Änderungen wurden übernommen">
            </TextBlock>
      </Grid>
</Popup>

Visual Studio 中的预览(看起来和我想做的一模一样): 实际结果: 如您所见,绿色 PopUp 内的 TextBox 未居中。而且我不知道为什么,也许我错过了一些东西,但对我来说一切看起来都很好。

【问题讨论】:

  • 你不能信任Width="{Binding ActualWidth, ElementName=Popup},如果Popup的宽度更新了,Grid的宽度不会受到影响。
  • 你好,我的朋友 :D 我怎样才能改变宽度然后到父控件?
  • 首先,您到底想在这里展示什么?只是一个浮动在顶部的消息框?
  • 是的,它就像用户点击按钮时的信息(带有淡入淡出动画)
  • 但是Popup 不支持开箱即用的动画。 Flyout 的动画是半生不熟的。你在实施你自己的吗?您可以尝试订阅 SizeChanged 事件并手动更新宽度,但我会为此创建自己的控件。

标签: c# xaml uwp uwp-xaml


【解决方案1】:

您可以像这样手动订阅SizeChangedPopup -

Popup.SizeChanged += (s,e) => PopupGrid.Width = Popup.ActualWidth;

更新

我通常会创建一个 UserControl 弹出窗口,该弹出窗口公开一个 MessageText 属性,以便我可以传递动态文本,以及另一个 IsOpen 标志来切换其可见性。我还将它从命中测试中禁用,并让它在几秒钟后自行关闭。

隐藏和显示应该通过封装在控件内部的Storyboards 来完成。

最后,这个MessageControl应该是这个样子-

<local:MessageControl IsOpened="{x:Bind MyToggle.IsOn, Mode=OneWay}" Message="Die Änderung wurde übernommen!" />

我已经包含了一个示例项目here 供您参考,这就是它的样子 -

【讨论】:

  • nvm,我只是使用了我自己的 Grid,我为它制作了动画。它可以在没有任何事件处理程序或其他东西的情况下完美运行.. 不过谢谢你
  • 没错,只是一个网格,里面有一个TextBlock :)
  • 你可以编辑你的答案,如果你愿意,我可以将其标记为解决方案..
  • 我将不得不更新更多内容。等待它。 :)
  • np,慢慢来:)
猜你喜欢
  • 1970-01-01
  • 2017-01-23
  • 1970-01-01
  • 1970-01-01
  • 2017-04-30
  • 2017-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多