2009-08-21 61 views
3

新しい画像を追加するウィンドウがあります(画像とともに)、中央にコントロールを中央に配置するだけです(縦と横の両方)。私は垂直なものだけを動かすことができます。私はDockPanelのコンテンツを自分のCodeBehindからスワップして、スライドショーUIを開始する前にこのスタートアップ画面を表示したいと考えています。これは、コンテンツがCodeBehindから設定されていることを意味します。マイWindowWPFコントロールの中央揃え

<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> 

Iが最大/フルスクリーンを使用していますのでご注意ください。

答えて

10

Gridを使用します。伸ばして(あなたがそこにDockPanelを持っている必要がある場合)

<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内側にドッキングすることができます。もちろん、上記はすべてマークアップですが、コードからそのようなグリッドを簡単に作成することもできます。

+0

Thxを束、それは – H4mm3rHead

+0

:-)作品これは、Windows RT –

+0

上では動作しませんRT上のストアのアプリを書き込むために使用されるXAMLベースのフレームワークは、WPFではありません。もしあれば、それはSilverlightの派生品です。 –

1

ページ上に要素を配置するときにこの問題が発生しています。 StackPanelの問題点は、OrientationがHorizo​​ntalの場合はHorizo​​ntalAlignmentが効果がなく、OrientationがVerticalの場合はVerticalAlignment効果がないことです。だからあなたは何の効果もない値を設定しようと頭を叩いています。このように動作するのは非論理的ではありませんが、エラーとして報告されていれば良いでしょう。

私が見つけた解決策は、以下の図のように水平に中央に1つ、垂直にもう1つの重なった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

ニースでわかりやすいアイデアですが、特別なコントロールが必要ですが、これは最も簡単な方法の1つです!私はこれを使用しています!あなたは私の一日を救った。 – Sree

関連する問題