嗨,我以为我可以轻松解决这个问题,但这让我发疯了。
我正在使用UserControl来容纳基于VLC的视频播放器控件,以及播放和停止按钮等。然后我将UserControl放在我的主窗体上。如果UserControl在XAML中声明,则表现正常。
我决定重写代码以动态实例化我的UserControl,以防我需要销毁它并在运行中创建另一个。但是,当我这样做的时候,视频移动到其容器的顶部而不是中间。
UserControl相关部分在这里:
<Grid x:Name="LayoutParent" >
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
<RowDefinition Height="12" />
</Grid.RowDefinitions>
<!-- I comment this if adding player dynamically -->
<!--<wpf:VlcPlayer Grid.Row="0" x:Name="Player" />-->
<!-- I un-comment this if adding player dynamically -->
<Grid x:Name="VideoPlayerPanel" Grid.Row="0" Margin="0" />
<StackPanel Grid.Row="1" Opacity="0.8">
...(buttons etc)
</StackPanel>
<ProgressBar ...(progressBar etc) />
</Grid>
我的代码隐藏看起来像这样:
Dim Player As VlcPlayer = New VlcPlayer ' uncomment If adding the player dynamically
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
Player.SetValue(Canvas.ZIndexProperty, -1)
VideoPlayerPanel.Children.Add(Player)
VolumeSlider.Value = 50
End Sub
我在VideoPlayerPanel上的XAML中尝试了VerticalAlignment="Center"
和VerticalAlignment="Stretch"
,视频中心完全消失了,Stretch仍然与顶部对齐。
任何关于我可能采取哪些措施来集中统一的想法都会非常感激!
答案 0 :(得分:1)
添加播放器dynamiccaly时,您会得到不同的结果,因为您将Play包装在其他网格中。尝试将Player直接添加到LayoutParent的第一行:
Player.SetValue(Grid.Row, 0)
LayoutParent.Children.Add(Player)
答案 1 :(得分:1)
感谢所有回复。
我做了一些更多的研究,我在一个矩形代替玩家控制,它完美对齐。这让我发现第三方控制本身就是错误的。我必须直接获取源并更改VerticalAlignment。
对不起,我们很抱歉。
答案 2 :(得分:0)
从第一个Height="*"
移除Row
。 *
用于占用剩余空间,因此最好将其用于最后Row
。
使用固定宽度和/或Auto
。