首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调试器中的.NET窗口高度差异

调试器中的.NET窗口高度差异
EN

Stack Overflow用户
提问于 2014-03-09 21:44:41
回答 1查看 560关注 0票数 0

我在VisualStudio2013Express中用C#创建了一个项目,这是一个WPF应用程序。在Visual中使用调试器运行时,应用程序Window显示正确的大小,但是当从bin文件夹运行相同生成的可执行文件时,窗口大约高5-7 7px。值得一提的是,Window.Height是由底层代码动态控制的。

尽管如此,为什么在运行时大小会像它一样不同呢?我刚开始在Windows上进行开发。

下面是我的代码,用于调整大小:

代码语言:javascript
复制
const int WindowBaseHeight = 94;
const int ItemHeight = 68;
ObservableCollection<obj> CurrentItems = new ObservableCollection<obj>();

AppWindow.Height = WindowBaseHeight + ItemHeight * CurrentItems.Count;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-09 23:40:00

好的。深呼吸,然后删除代码,重新开始。

首先,如果您正在使用WPF,那么您需要抛弃其他技术中您可能习惯的任何和所有的方法,并理解和接受WPF心理

基本上,您不需要对布局进行任何操作,也不需要对UI元素进行手动调整,或者在过程代码中进行类似的操作,因为WPF在默认情况下是分辨率独立,它提供了几种机制来创建与可用屏幕/窗口大小完全匹配的自动可调布局和UI。

为了使窗口自动调整到其内容的大小,必须相应地设置Window.SizeToContent属性。

您需要理解的另一个非常重要的方面是,在WPF中,任何显示"items“的UI (任何显示2个或更多相同"thing”的UI,无论"thing“是什么)都应该使用ItemsControl实现。

这是如何在WPF中创建基于自动可调项的UI,其中项目的高度为68:

代码语言:javascript
复制
<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>

后面的代码(为了示例起见):

代码语言:javascript
复制
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        DataContext = Enumerable.Range(0, 4).Select(x => "Item" + x.ToString());
    }
}

结果:

  • 注意我是如何使用ItemsControl和DataBinding --它是ItemsSource属性的,以便在正确的XAML中声明性地定义UI,而不是在代码中按过程创建UI。这是WPF中用于everything的首选方法。
  • 这种方法将后面的代码减少到几乎为零。正如您在我的示例中所看到的,我所做的只是将窗口的DataContext设置为可用于DataBinding的相关数据段。
  • 还请注意,没有任何代码做任何操作的UI。窗口大小由WPF根据SizeToContent属性的值设置,该属性设置为Height
  • 为了示例起见,我将绑定到一个List<string>,但是您可以将数据库绑定到WPF中的任何类型的.Net对象,甚至是直接转到XML
  • WPF Rocks. --只需将我的代码复制并粘贴到File -> New Project -> WPF Application中,并亲自查看结果。
  • 我建议您阅读这篇文章中的链接材料,最重要的是"WPF心态“帖子、DataBinding概述和ItemsControl系列。如果你需要进一步的帮助,请告诉我。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22288578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档