我試圖將一個模態彈出式控制元件相對于整個螢屏在 xaml 螢屏上居中,但如果控制元件太大,中央控制元件也會被兄弟(側面板)推開兩個會相交。這對于代碼隱藏、資料系結、資料觸發器、自定義控制元件和其他不太優雅的方法是可行的,但是有沒有辦法只用 xaml 開箱即用地解決這個問題?
這是問題的一個大大簡化的版本,它是一個帶有兩個矩形的視窗。橙色矩形始終為 200 像素。綠色矩形大小不一,但從不大于 600 像素。我們可以讓綠色矩形在螢屏上居中,除非它足夠寬以至于它會與橙色矩形發生碰撞,在這種情況下,綠色矩形被布置在橙色矩形的右側(如堆疊面板)?綠色和橙色矩形可以放入您想要的任何容器中,并且容器可以以您想要的任何方式嵌套。
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid Width="800">
<Rectangle Width="200" Fill="Orange" HorizontalAlignment="Left" ></Rectangle>
<Rectangle Width="300" Fill="Green" HorizontalAlignment="Center"></Rectangle>
</Grid>
</Window>
uj5u.com熱心網友回復:
沒有內置的方法可以做到這一點,但這種方法有效并且相當簡單:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition MinWidth="200"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Rectangle Width="200" Fill="Orange" HorizontalAlignment="Left" />
<Rectangle Grid.Column="1" Width="300" Fill="Green" HorizontalAlignment="Center"/>
</Grid>
如果您不想復制橙色矩形的寬度,您可以這樣做:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition MinWidth="{Binding ElementName=OrangeRectangle, Path=ActualWidth}"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Rectangle x:Name="OrangeRectangle" Width="200" Fill="Orange" HorizontalAlignment="Left" />
<Rectangle Grid.Column="1" Width="300" Fill="Green" HorizontalAlignment="Center"/>
</Grid>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/363508.html
