這裏有點難以確切地說出你的要求在這裏。你說你用帆布試過了,但你似乎無法做到。什麼沒有用?
我用這個代碼:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="TestApp.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="175" Height="170" Background="LightGray">
<Grid>
<Canvas Background="LightBlue" Height="10"
Margin="0,27,0,79" VerticalAlignment="Top">
<Rectangle Height="40" Width="20" Fill="Black"
Canvas.Left="66" Canvas.Top="-15" />
</Canvas>
</Grid>
</Window>
,並能夠基本上是假的截圖是什麼樣子。但是(正如你可以通過我的代碼中的Canvas.Left
和Canvas.Top
部分所分辨的那樣),這有點駭人聽聞。您可以通過綁定的ActualWidth
並使用將其轉換爲正確值的IValueConverter
來擺脫Canvas.Left
。
編輯:
遠一點的探索後,我想出了這樣做的稍微少hackish的方式。儘管嵌套類型讓我感到畏縮,但硬編碼唯一的東西是讓頁面垂直居中的頂部邊距。再次,這可以通過IValueConverter
來完成,但你不需要。不幸的是,我不知道我能比這更好。
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="WpfApplication10.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480">
<Grid x:Name="LayoutRoot">
<Grid Background="LightBlue" Height="10" ClipToBounds="False" Margin="0,27,0,79">
<Canvas>
<Grid Width="{Binding ActualWidth, RelativeSource={RelativeSource FindAncestor, AncestorType=Canvas}}"
Height="{Binding ActualHeight, RelativeSource={RelativeSource FindAncestor, AncestorType=Canvas}}">
<Canvas HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0 -40 0 0">
<Rectangle Height="40" Width="20" Fill="Black" ClipToBounds="False"/>
</Canvas>
</Grid>
</Canvas>
</Grid>
</Grid>
</Window>
來源
2011-05-22 23:10:37
Tim
我想要做的是使矩形的中心出現在父網格的中心,並忽略網格的邊界溢出邊界以上。您的解決方案太硬編碼以滿足我的需求。然而,我可能會使用像你說的轉換器,但是如果可能的話,我寧願只使用XAML解決方案(但不對這些值進行硬編碼)。 – VitalyB 2011-05-23 06:44:12
@VitalyB - 理解。我再試一次。仍然有一個硬編碼值,但我擺脫了另一個值。看我的編輯。仍然可能不適合你,但只是想看看我能想出什麼。 – Tim 2011-05-23 13:09:20
不錯的解決方案! :)。標記爲答案。你是對的,它不是非常漂亮,而且相當危險,我猜在這種情況下最好使用轉換器,但問題是,這是一個合法的答案,硬編碼的部分是非常小的。謝謝! – VitalyB 2011-05-23 14:31:34