2009-08-21 95 views
3

我有一個窗口,我添加一個新的UserControl(與一個圖像),我只是想中央控制在屏幕中間(垂直和水平)。我只能得到垂直的工作。我將從我的CodeBehind中交換DockPanel的內容,並希望在我開始製作幻燈片用戶界面之前顯示此啓動屏幕,這意味着內容是從CodeBehind設置的。居中一個WPF控件

Window

<Window x:Class="GreenWebPlayerWPF.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="512" Width="853" WindowStyle="None" WindowState="Maximized" WindowStartupLocation="CenterScreen"> 
    <DockPanel Width="Auto" Height="Auto" Name="TransitionContainer" Background="Black" Margin="0" LastChildFill="True"></DockPanel> 
</Window> 

UserControl

<UserControl x:Class="GreenWebPlayerWPF.FrontPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <DockPanel Background="Black"> 
     <Image Name="image1" Stretch="None" Source="/GreenWebPlayerWPF;component/gw.png" /> 
    </DockPanel> 
</UserControl> 

請注意,我使用的最大化/全屏。

回答

10

使用Grid

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*"/> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <!-- Replace with your UserControl --> 
    <Button Content="Foo" Grid.Column="1" Grid.Row="1"/> 
    </Grid> 

可以停靠這裏面你DockPanel(如果你必須有一個DockPanel那裏)伸展。當然,雖然以上都是標記,但您可以輕鬆地從代碼創建這樣的網格。

+0

THX一堆,它的工作原理:-) – H4mm3rHead 2009-08-21 20:08:26

+0

這不能在Windows RT – 2013-07-27 14:22:44

+0

的基於XAML的框架,用於在RT寫商店Apps並非WPF工作。如果有的話,它更多的是Silverlight派生。 – 2013-07-29 16:50:45

1

當我嘗試在頁面上居中元素時,我一直在遇到這個問題。 StackPanel的問題在於,當方向爲水平時,Horizo​​ntalAlignment不起作用,在方向爲垂直時,VerticalAlignment不起作用。所以你一直在試圖設定價值而沒有效果。以這種方式工作並不合邏輯,但如果這被報告爲錯誤,那將是很好的。

我找到的解決方案是有兩個疊加的StackPanels,一個水平居中,另一個垂直居中,如下所示。需要查找父級的大小來確定中間面板的大小,否則將會保持平坦並隱藏其內容 - 絕對值也會起作用。雖然不是靈丹妙藥,但它比使用網格略少一些。

<StackPanel Background="Bisque" Orientation="Vertical" Width="300" Height="300" > 
    <StackPanel HorizontalAlignment="Center" Orientation="Horizontal" 
        Height="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=StackPanel}, Path=ActualHeight}"> 
     <StackPanel VerticalAlignment="Center" Width="200" Height="60" Background="Blue"> 
     </StackPanel> 
    </StackPanel> 
</StackPanel> 
+0

不錯的和易於理解的想法,但需要額外的控制,但這仍然是最簡單的方法之一!我正在使用這個!你拯救了我的一天。 – Sree 2017-07-13 19:18:42