Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调试程序中的.NET窗口高度不同_C#_.net_Wpf_.net 4.0_Visual Studio 2013 - Fatal编程技术网

C# 调试程序中的.NET窗口高度不同

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

我在Visual Studio 2013 Express的C#中创建了一个项目,这是一个WPF应用程序。当从Visual Studio使用调试器运行时,应用程序的
窗口显示正确的大小,但是当从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());
    }
}