【发布时间】:2021-09-19 23:04:39
【问题描述】:
我目前正在开发一个全屏 WPF 应用程序。应用程序在 Window_Loaded 事件时全屏显示。
在窗口里面,我有一个 Canvas。在画布内,我有一个 MediaElement 和 3 个图像。这是 XAML:
<Window x:Class="Test_CS4.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:Test_CS4"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800" Loaded="Window_Loaded" AllowDrop="True" Background="Black">
<Canvas x:Name="myCanvas" HorizontalAlignment="Center" VerticalAlignment="Center" UseLayoutRounding="True" >
<MediaElement x:Name="mediaElement1" MediaEnded="mediaElement_OnMediaEnded" Canvas.ZIndex="1" Height="390" VerticalAlignment="Center" MouseLeftButtonDown="mediaElement1_MouseLeftButtonDown_1" HorizontalAlignment="Center" Width="767" Canvas.Left="-384" Canvas.Top="-190"/>
<Image x:Name="image1" Canvas.ZIndex="2" Height="390" Width="791" HorizontalAlignment="Center" VerticalAlignment="Center" Canvas.Left="-795" Canvas.Top="-392" />
<Image x:Name="checkImg" HorizontalAlignment="Left" Height="54" Margin="50,196,0,0" VerticalAlignment="Top" Width="67"/>
<Image x:Name="crossImg" Height="54" Margin="0,196,663,0" VerticalAlignment="Top" MouseLeftButtonDown="crossImg_MouseLeftButtonDown" HorizontalAlignment="Right" Width="67"/>
</Canvas>
</Window>
问题
当我运行应用程序时,画布无法更新并适合整个全屏。因此,当我尝试为图像设置位置时(例如使用 Canvas.SetLeft(this.crossImg,0); ),当窗口全屏时,画布看起来实际上是移动的。
我需要设置图像的“x y 坐标”并相应地更改它们。我尝试过使用网格,但它不允许我在 MediaElement 顶部叠加图像,所以我知道画布是要走的路。
问题
当窗口进入全屏模式时,如何以编程方式调整画布大小以适应窗口?
【问题讨论】:
-
设置
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"。请注意,全屏显示不需要 Loaded 事件。只需设置WindowState="Maximized"。当然,您也可以将子元素放在一个网格中。 -
@Clemens 谢谢你实际上设置 WindowState="Maximized" 效率更高,因为它从一开始就这样做,而不是在加载时最大化!我还设置了 WindowStyle="None" 使其真正全屏
-
Grid确实 让您将多个元素放在一起,听起来(或其他面板)可能是一个更好的选择。我想知道您在使用Grid时遇到了什么问题,并希望看到一些说明您希望完成的程序看起来像什么。
标签: wpf canvas resize fullscreen