覆蓋一個TextBlock成分在圖像這裏,隨着它的數的每個塊表示一個激光器。這些塊放置在DockPanel內的畫布上。 DockPanel裏面停靠的頂部是紅色的TextBlock,你可以看到隱藏在激光地圖畫布後面。這是爲什麼發生? TextBlock停靠在DockPanel的頂部,畫布沒有停靠位置,因此它應該填充剩餘空間。另外值得注意的是:爲了讓整個中心屏幕空間能夠在窗口大小上正確縮放,我必須將DockPanel放在ViewBox中。然後,我必須將該ViewBox放入ScrollViewer中,以便在需要時顯示滾動條。
這裏是中心屏幕的XAML代碼(注意:窗口的孩子是一個DockPanel。菜單停靠在頂部,左側按鈕面板停靠在左側,右側面板停靠在右邊,狀態欄停靠在底部和一切你在屏幕中央看到的是由下面的XAML代碼中定義)
<ScrollViewer
Name="centerScreenScrollViewer"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="{Binding IsScrollbarsVisible, Converter={StaticResource BoolToScrollbarVisConverter}, FallbackValue=Hidden}">
<Viewbox>
<DockPanel
LastChildFill="True">
<TextBlock
DockPanel.Dock="Top"
Name="tbkFullVisual"
Style="{StaticResource tbkStyleBlue}"
Foreground="Red"
IsEnabled="{Binding FullVisual}"
HorizontalAlignment="Center"
VerticalAlignment="Top"
FontSize="24">
*** This Print Requires Full Visual Inspection! ***
</TextBlock>
<Canvas x:Name="mapCanvas">
<ContentPresenter Content="{Binding MapCanvas}"/>
</Canvas>
</DockPanel>
</Viewbox>
</ScrollViewer>
解決這個問題的任何幫助,將不勝感激。
問候,
凱爾
這效果很好。謝謝,我會接受這個答案。但首先,另一個快速問題是:我怎樣才能做到這一點,所以帆布的孩子不會超出界限?我已經使用了ClipToBounds = True,但是由於我沒有爲畫布定義大小,因此這會導致問題。有什麼建議麼?我唯一能想到的就是重寫OnWindowResize。在那裏,將畫布的高度和寬度設置爲視框的視口高度和視口寬度。 – kformeck
我會重新考慮使用'ViewBox',而不是'DockPanel'。 「ViewBox」的主要目的是在調整大小時保持寬高比和縮放比例,在這種情況下,你需要一個畫布自動填充'ViewBox'將阻止的可用空間。您可以考慮嘗試將Canvas的'Width'綁定到ViewBox的'Width',然後綁定'Height',但使用轉換器來減去'TextBlock'的高度;但這真的很難看。 @kformeck – Matt