[英]Can a WPF control be centered around its parent but also respect the position of its sibling control using xaml only?
我試圖在 xaml 屏幕上相對於整個屏幕將模態彈出式控件居中,但如果控件太大,中央控件也會被兄弟(側面板)推開兩個會相交。 這對於代碼隱藏、數據綁定、數據觸發器、自定義控件和其他不太優雅的方法是可行的,但是有沒有辦法只用 xaml 開箱即用地解決這個問題?
這是問題的一個大大簡化的版本,它是一個帶有兩個矩形的 window。 橙色矩形始終為 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>
沒有內置的方法可以做到這一點,但是這種方法有效並且相當簡單:
<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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.