在WPF中创建UserControl时,我发现给它指定一些任意的高度和宽度值很方便,这样我就可以在Visual Studio designer中查看我所做的更改。但是,当我运行控件时,我希望高度和宽度是未定义的,这样控件将扩展以填充我放置它的任何容器。如何才能获得相同的功能,而不必在构建控件之前删除高度和宽度值?(或者不在父容器中使用DockPanel。)
下面的代码演示了这个问题:
<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
定义在设计时合理显示,但在运行时显示为固定大小:
<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
:
<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>
发布于 2008-09-16 18:44:07
在Visual Studio中,将宽度和高度属性添加到UserControl XAML中,但在代码隐藏中插入以下内容
public UserControl1()
{
InitializeComponent();
if (LicenseManager.UsageMode != LicenseUsageMode.Designtime)
{
this.Width = double.NaN; ;
this.Height = double.NaN; ;
}
}
这将检查控件是否在设计模式下运行。如果不是(即运行时),它会将宽度和高度设置为NaN (而不是一个数字),这是您在删除XAML中的宽度和高度属性时设置的值。
因此,在设计时,您将拥有预设的宽度和高度(包括如果您将用户控件放在窗体中),而在运行时,它将根据其父容器停靠。
希望这能有所帮助。
发布于 2008-09-16 18:36:06
对于Blend,一个鲜为人知的技巧是将这些属性添加到您的用户控件或窗口中:
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设计器的原因。;)
发布于 2011-04-03 08:26:32
以下是Design-Time Attributes in the Silverlight Designer的列表。它们对于WPF设计器是相同的。
它列出了设计器中所有可用的d:
值,如d:DesignHeight
、d:DesignWidth
、d:IsDesignTimeCreatable
、d:CreateList
等。
https://stackoverflow.com/questions/75495
复制相似问题