web-dev-qa-db-ja.com

C#/ WPF:ポップアップコントロールを画面の中央に配置しますか?

画面の中央にポップアップコントロールを配置する方法を知っている人はいますか?

ありがとう!

PlacementプロパティとPlacementTargetプロパティを使用して、ウィンドウのルートにあるパネルを基準にして配置します。したがって、Gridと呼ばれるウィンドウに他のすべての「もの」を含むStackPanelMainPanelなどがある場合、次のようにします。

<Popup
    PlacementTarget="{Binding ElementName=MainPanel}"
    Placement="Center"
>
28
Tim Ridgely

まず、System.Windows.SystemParametersクラスの静的プロパティFullPrimaryScreenHeightFullPrimaryScreenWidthを使用して、画面の高さと幅を取得できます。次に、表示する前に、幅と高さを使用してポップアップコントロールのTopプロパティとLeftプロパティを設定できます。

何かのようなもの。

double primScreenHeight = System.Windows.SystemParameters.FullPrimaryScreenHeight;
double primScreenWidth = System.Windows.SystemParameters.FullPrimaryScreenWidth;
_yourControl.Top = (primScreenHeight - _yourControl.Height) / 2;
_yourControl.Left = (primScreenWidth - _yourControl.Width) / 2;
3
tranmq

グリッドをコンテナとして使用すると、配置が正常に機能します。

<Popup IsOpen="True">
  <Grid Name="canvasMain">
    <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
      ...
    </StackPanel>
  </Grid>
</Popup>
2

ポップアップのサイズがないため、これらの回答はどれもうまくいきませんでした。私は次のようにコードビハインドでこれを行うことになりました:

var popup = new Popup
{
    Child = new YourUIControlHere(),
    Placement = PlacementMode.Center,
    PlacementRectangle = new Rect(new Size(
        SystemParameters.FullPrimaryScreenWidth, 
        SystemParameters.FullPrimaryScreenHeight))
};

これは、画面サイズのバインディングを追加することで、XAMLに簡単に拡張できます。

明らかな機能強化は、マルチモニターのサポートに現在の画面を使用することです。ただし、現在のウィンドウのサイズを取得するのはかなり手間がかかります。

2
Mike Ward