画面の中央にポップアップコントロールを配置する方法を知っている人はいますか?
ありがとう!
PlacementプロパティとPlacementTargetプロパティを使用して、ウィンドウのルートにあるパネルを基準にして配置します。したがって、Grid
と呼ばれるウィンドウに他のすべての「もの」を含むStackPanel
、MainPanel
などがある場合、次のようにします。
<Popup
PlacementTarget="{Binding ElementName=MainPanel}"
Placement="Center"
>
まず、System.Windows.SystemParameters
クラスの静的プロパティFullPrimaryScreenHeight
、FullPrimaryScreenWidth
を使用して、画面の高さと幅を取得できます。次に、表示する前に、幅と高さを使用してポップアップコントロールの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;
グリッドをコンテナとして使用すると、配置が正常に機能します。
<Popup IsOpen="True">
<Grid Name="canvasMain">
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
...
</StackPanel>
</Grid>
</Popup>
ポップアップのサイズがないため、これらの回答はどれもうまくいきませんでした。私は次のようにコードビハインドでこれを行うことになりました:
var popup = new Popup
{
Child = new YourUIControlHere(),
Placement = PlacementMode.Center,
PlacementRectangle = new Rect(new Size(
SystemParameters.FullPrimaryScreenWidth,
SystemParameters.FullPrimaryScreenHeight))
};
これは、画面サイズのバインディングを追加することで、XAMLに簡単に拡張できます。
明らかな機能強化は、マルチモニターのサポートに現在の画面を使用することです。ただし、現在のウィンドウのサイズを取得するのはかなり手間がかかります。