C# 调试程序中的.NET窗口高度不同
我在Visual Studio 2013 Express的C#中创建了一个项目,这是一个WPF应用程序。当从Visual Studio使用调试器运行时,应用程序的C# 调试程序中的.NET窗口高度不同,c#,.net,wpf,.net-4.0,visual-studio-2013,C#,.net,Wpf,.net 4.0,Visual Studio 2013,我在Visual Studio 2013 Express的C#中创建了一个项目,这是一个WPF应用程序。当从Visual Studio使用调试器运行时,应用程序的窗口显示正确的大小,但是当从bin文件夹运行相同生成的可执行文件时,窗口大约高出5-7px。值得一提的是,Window.Height是由底层代码动态控制的 也就是说,为什么在运行时大小会像它一样不同?我不熟悉Windows上的开发 以下是我的代码,用于调整大小: const int WindowBaseHeight = 94; cons
窗口显示正确的大小,但是当从bin文件夹运行相同生成的可执行文件时,窗口大约高出5-7px。值得一提的是,Window.Height
是由底层代码动态控制的
也就是说,为什么在运行时大小会像它一样不同?我不熟悉Windows上的开发
以下是我的代码,用于调整大小:
const int WindowBaseHeight = 94;
const int ItemHeight = 68;
ObservableCollection<obj> CurrentItems = new ObservableCollection<obj>();
AppWindow.Height = WindowBaseHeight + ItemHeight * CurrentItems.Count;
const int WindowBaseHeight=94;
常数int ItemHeight=68;
ObservableCollection CurrentItems=新的ObservableCollection();
AppWindow.Height=WindowBaseHeight+ItemHeight*CurrentItems.Count;
好的。深呼吸,然后删除代码,重新开始
首先,如果您正在使用WPF,您需要抛弃任何和所有可能从其他技术中使用的方法,并理解和接受这些方法
基本上,您不需要对布局进行任何操作,也不需要手动调整UI元素的大小,也不需要在过程代码中执行类似操作,因为WPF在默认情况下提供了多种机制来创建自动调整的布局和UI,无论可用的屏幕/窗口大小如何,它们都可以完美地匹配
为了使窗口自动调整其内容大小,必须相应地设置属性
您需要了解的另一个非常重要的方面是,在WPF中,任何显示“项”的UI(任何显示2个或更多相同“事物”的UI,无论“事物”是什么)都应该使用
这是如何在WPF中创建基于项目的自动调整UI,其中项目的高度为68:
<Window x:Class="WpfApplication3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" SizeToContent="Height" Width="200">
<ItemsControl ItemsSource="{Binding}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Height="68" Background="LightCyan">
<TextBlock Text="{Binding}"
VerticalAlignment="Center"
HorizontalAlignment="Center"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Window>
结果:
- 请注意,我是如何使用ItemsControl及其属性,以便在适当的XAML中声明性地定义UI,而不是在代码中按程序创建UI的。这是WPF中所有内容的首选方法
- 这种方法将代码延迟减少到几乎为零。正如您在我的示例中所看到的,我所做的只是将窗口的属性设置为可用于数据绑定的相关数据段
- 还请注意,没有任何代码对UI进行任何操作。窗口大小由WPF根据
SizeToContent
属性的值设置,该属性设置为Height
- 为了这个示例,我绑定到了一个
列表
,但是您可以将数据绑定到WPF中的任何类型的.Net对象,甚至
- WPF Rocks.-只需将我的代码复制并粘贴到
文件->新项目->WPF应用程序中
,然后自己查看结果
- 我建议你阅读这篇文章中的链接材料,最重要的是“WPF心态”文章、
DataBinding
概述和ItemsControl
系列。如果你需要进一步的帮助,请告诉我
你能展示一下你调整窗口大小的代码吗?@Adam你看,添加了相关部分。看起来你是在根据你收藏的物品数量改变你的高度。有没有可能你的收藏品比你预期的要多?@Adam nope,我不这么认为。高度差会大得多,另外,在VisualStudio中运行时,它也能完美工作。在Visual Studio之外运行时,差异肯定小于10像素。您的代码没有意义。如果CurrentItems.Count
是25亿呢?你会有一个窗户2.5b*itemheight
高吗?哦!谢谢你的回答。我已经在使用一个ItemsControl
,所以我认为我不知道的Window.SizeToContent
属性肯定是我应该使用的。我仍然在习惯WPF,但我相信这将帮助我以正确的方式做事。是的!果然,这解决了我的矛盾问题。谢谢。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = Enumerable.Range(0, 4).Select(x => "Item" + x.ToString());
}
}