覆盖一个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