为什么我的窗口在加载图像时改变大小?



我有一个应用程序,改变窗口大小没有明显的原因。它只有一个按钮和一个400x300px的图像。当按下按钮时,将创建一个黑色图像(400x300px)并将其加载到image控件,这将导致窗口增加到1800x1400px。我觉得这是一个奇怪的bug。知道为什么会这样吗?

MainWindow.xaml:

<Window x:Class="WindowSizeTest.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"
mc:Ignorable="d"
Title="MainWindow" SizeToContent="WidthAndHeight">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Button Content="Press me" Click="Button_Click"/>
<Image x:Name="_img" Grid.Row="1" MinWidth="400" MinHeight="300"/>
</Grid>
</Window>

MainWindow.xaml.cs

using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
namespace WindowSizeTest
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
void Button_Click(object sender, RoutedEventArgs e)
{
_img.Source = BitmapSource.Create(
400,
300,
96.0,
96.0,
PixelFormats.Gray8,
null,
new byte[400 * 300],
400);
}
}
}

设置图像的Stretch属性为None,以确保图像元素使用其Source位图的确切大小。

<Image x:Name="_img" MinWidth="400" MinHeight="300" Stretch="None"/>

处理窗口"Loaded"事件来解决此问题:

void Window_Loaded(object sender, RoutedEventArgs e)
{
this.SizeToContent = SizeToContent.Manual;
}

最新更新