希望有些WPF忍者可以向我解释为什么我有一个标签控件,在我的标签中我将内容(在本例中为用户控件)放入ItemsControl或ContentControl中,contentControl中的内容将展开并填满整个屏幕,但如果它在一个项目控件,它不会...我认为这个例子将使这更清楚。
public MainWindow()
{
InitializeComponent();
//This content won't expand to fill the available space
var t1 = new TabItem();
t1.Header = "Tab One";
var ic = new ItemsControl();
ic.Items.Add(new UserControl1());
t1.Content = ic;
//in this case the label will fill up the whole window...
var t2 = new TabItem();
t2.Header = "Tab Two";
var c = new ContentControl();
c.Content = new UserControl1();
t2.Content = c;
MyTab.Items.Add(t1);
MyTab.Items.Add(t2);
}
这是窗口的XAML。
<Grid>
<TabControl Name="MyTab">
</TabControl>
</Grid>
这是用户控件 - 除了标签......
<UserControl x:Class="TabControlTest.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300" Background="Red">
<Label Content="User control one"/>
感谢!!!
答案 0 :(得分:11)
ContentControl
旨在显示单个内容。默认情况下,它会拉伸以填充整个包含区域,ContentControl
内的内容将会拉伸以填充它。
ItemsControl
,如名称所示,旨在在其中显示多个项目。它将填充其包含的区域,但添加的内容项只会占用他们需要的空间。这是因为它旨在允许添加多个项目 - 如果第一个项目被拉伸以填满空间,则稍后添加的其他项目将没有“空间”。
答案 1 :(得分:2)
Reed声明的是正确的,但您可以更改ItemsControl的行为(编辑ItemTemplate以使其默认占用所有可用高度)。但是,我不确定这是一个好主意(因为它意味着能够容纳多个项目)。