以编程方式在WPF中进行位置控制

时间:2013-08-16 00:01:40

标签: wpf vb.net

我正在WPF中创建一个卡拉OK程序。基本上,我有一个播放视频等的MediaElement,以及一个用于在MediaElement上渲染内容的StackPanel。

我正在尝试以编程方式将一个TextBlock添加到StackPanel,它将显示歌词。问题是,无论我写什么,TextBlock都会在左上角结束。

Private LyricLabel As New TextBlock 

Sub New(Panel As StackPanel)
    With LyricLabel
        .Foreground = Brushes.White
        .FontFamily = New FontFamily("Verdana")
        .FontSize = 20

        .HorizontalAlignment = HorizontalAlignment.Stretch
        .VerticalAlignment = VerticalAlignment.Bottom
    End With

    Panel.Children.Add(LyricLabel)
End Sub

另外,我想要一个球或什么东西在一个单词之间跳跃。是否有一种简单的方法可以获得每个单词的宽度+它们之间的空间,还是我必须自己计算?

1 个答案:

答案 0 :(得分:1)

使用Grid并在XAML中完全执行此操作将是更好的选择。 Grid具有以下属性:如果许多元素位于同一单元格中,则它们都重叠。因此,您将MediaElement和TextBlock放在一起,并进行正确的对齐,然后就完成了:

<Grid>
    <MediaElement/>
    <TextBlock Text="{Binding CurrentLyric}" FontSize="20" HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="0 0 0 30"/>
</Grid>

您只需提供一个属性即可删除要显示的当前文本以使绑定正常工作,并且会为您调整它。