首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >WPF UserControl设计时大小

WPF UserControl设计时大小
EN

Stack Overflow用户
提问于 2008-09-16 18:32:10
回答 8查看 40.8K关注 0票数 52

在WPF中创建UserControl时,我发现给它指定一些任意的高度和宽度值很方便,这样我就可以在Visual Studio designer中查看我所做的更改。但是,当我运行控件时,我希望高度和宽度是未定义的,这样控件将扩展以填充我放置它的任何容器。如何才能获得相同的功能,而不必在构建控件之前删除高度和宽度值?(或者不在父容器中使用DockPanel。)

下面的代码演示了这个问题:

代码语言:javascript
复制
<Window x:Class="ExampleApplication3.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:loc="clr-namespace:ExampleApplication3"
    Title="Example" Height="600" Width="600">
    <Grid Background="LightGray">
        <loc:UserControl1 />
    </Grid>
</Window>

以下UserControl1定义在设计时合理显示,但在运行时显示为固定大小:

代码语言:javascript
复制
<UserControl x:Class="ExampleApplication3.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300">
    <Grid Background="LightCyan" />
</UserControl>

下面的UserControl1定义在设计时显示为一个点,但在运行时扩展为填充父Window1

代码语言:javascript
复制
<UserControl x:Class="ExampleApplication3.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid Background="LightCyan" />
</UserControl>
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-09-16 18:44:07

在Visual Studio中,将宽度和高度属性添加到UserControl XAML中,但在代码隐藏中插入以下内容

代码语言:javascript
复制
public UserControl1()
{
    InitializeComponent();
    if (LicenseManager.UsageMode != LicenseUsageMode.Designtime)
    {
        this.Width = double.NaN; ;
        this.Height = double.NaN; ;
    }
}

这将检查控件是否在设计模式下运行。如果不是(即运行时),它会将宽度和高度设置为NaN (而不是一个数字),这是您在删除XAML中的宽度和高度属性时设置的值。

因此,在设计时,您将拥有预设的宽度和高度(包括如果您将用户控件放在窗体中),而在运行时,它将根据其父容器停靠。

希望这能有所帮助。

票数 39
EN

Stack Overflow用户

发布于 2008-09-16 18:36:06

对于Blend,一个鲜为人知的技巧是将这些属性添加到您的用户控件或窗口中:

代码语言:javascript
复制
 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d"
       d:DesignHeight="500" d:DesignWidth="600"

这会将设计高度和宽度分别设置为500和600。但是,这只适用于blend designer。而不是Visual Studio设计器。

就Visual Studio设计器而言,您的技术是唯一有效的方法。这就是为什么我不使用Visual Studio设计器的原因。;)

票数 81
EN

Stack Overflow用户

发布于 2011-04-03 08:26:32

以下是Design-Time Attributes in the Silverlight Designer的列表。它们对于WPF设计器是相同的。

它列出了设计器中所有可用的d:值,如d:DesignHeightd:DesignWidthd:IsDesignTimeCreatabled:CreateList等。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/75495

复制
相关文章

相似问题

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