嗨我想我可以很容易地解決這個問題,但這讓我瘋狂。當動態添加WPF控件對齊方式是錯誤的
我正在使用UserControl來安裝基於VLC的視頻播放器控件,以及播放和停止按鈕等。然後將UserControl放置在我的主窗體上。如果UserControl在XAML中聲明,則表現正常。
我決定重寫代碼來動態實例化我的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
我試圖在XAML VerticalAlignment="Center"
和VerticalAlignment="Stretch"
在VideoPlayerPanel,與中心視頻完全消失,Stretch仍然對齊頂部。
任何想法,我可能會做什麼來集中對齊將非常感激!
我的猜測是,你把你的VLC UI放在Canvas上,這是一個必須明確聲明尺寸的控件。因此,例如,當您將控件放置在網格中時,框架無法計算正確的排列方式。請記住,Canvas始終大小爲零,除非您聲明寬度和高度。 –
在代碼背後創建XAML的東西往往不是一個好主意。沒有太多的東西不是最好的模板。我花在XAML上的時間越多,看到的東西就越多,並想「爲什麼我會這樣做?」您是否遇到過一些常規性的問題? –