1. 基本用法:
<ContentControl><TextBlockText="Hello, WPF!"/></ContentControl>
在上述示例中,ContentControl
中包含一个 TextBlock
,用于显示文本 "Hello, WPF!"。这是 ContentControl
最简单的用法。
- 数据绑定:
<ContentControlContent="{Binding MyProperty}"/>
通过将 Content
属性绑定到一个属性上,可以动态地更改 ContentControl
中显示的内容。
- 模板选择:
<ContentControlContent="{Binding MyProperty}"><ContentControl.Resources><DataTemplateDataType="{x:Type local:MyClass}"><local:MyCustomControl/></DataTemplate></ContentControl.Resources></ContentControl>
在上述示例中,根据不同的数据类型选择不同的模板来显示内容。当 MyProperty
是 MyClass
类型时,将使用 MyCustomControl
控件来显示内容。
- 内容转换:
<ContentControlContent="{Binding MyProperty}"><ContentControl.ContentTemplate><DataTemplate><TextBlockText="{Binding Length}"/></DataTemplate></ContentControl.ContentTemplate></ContentControl>
通过定义 ContentTemplate
属性,可以自定义 ContentControl
中显示内容的外观。在上述示例中,MyProperty
的内容将被转换为一个 TextBlock
,并显示其长度。
- 动画效果:
<ContentControlx:Name="myContentControl"Content="Initial Content"><ContentControl.Triggers><EventTriggerRoutedEvent="ContentControl.MouseDown"><BeginStoryboard><Storyboard><DoubleAnimationDuration="0:0:1"To="1.5"Storyboard.TargetProperty="RenderTransform.ScaleX"/><DoubleAnimationDuration="0:0:1"To="1.5"Storyboard.TargetProperty="RenderTransform.ScaleY"/></Storyboard></BeginStoryboard></EventTrigger></ContentControl.Triggers><ContentControl.RenderTransform><ScaleTransform/></ContentControl.RenderTransform></ContentControl>
在上述示例中,点击 ContentControl
时,会启动一个动画效果,将内容进行缩放。
ContentControl
的应用非常灵活,它可以用于创建自定义控件、数据绑定、模板选择、内容转换等场景。通过对 ContentControl
进行自定义,并结合数据绑定和模板,您可以实现各种复杂的界面布局和交互效果。
2.经典应用
在WPF中,可以将ContentControl与TabControl结合使用,来实现将不同的内容显示在TabControl的选项卡中。下面是一个简单的例子:
XAML代码:
<TabControl><TabItemHeader="Tab 1"><ContentControlContent="{Binding Tab1Content}"/></TabItem><TabItemHeader="Tab 2"><ContentControlContent="{Binding Tab2Content}"/></TabItem></TabControl>
Tab1UserControl
<UserControlx:Class="BlankApp4.Tab1UserControl"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:local="clr-namespace:BlankApp4"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"d:DesignHeight="450"d:DesignWidth="800"mc:Ignorable="d"><GridBackground="Azure"><BorderHorizontalAlignment="Center"VerticalAlignment="Center"><TextBlockText="ContentControl1"/></Border></Grid></UserControl>
Tab2UserControl
<UserControlx:Class="BlankApp4.Tab2UserControl"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:local="clr-namespace:BlankApp4"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"d:DesignHeight="450"d:DesignWidth="800"Background="Black"mc:Ignorable="d"><Grid><BorderHorizontalAlignment="Center"VerticalAlignment="Center"><TextBlockForeground="White"Text="ContentControl1"/></Border></Grid></UserControl>
ViewModel代码:这里使用了第三方库Prism中的MVVM
publicclassMainWindowViewModel : BindableBase { publicMainWindowViewModel() { Tab1Content=newTab1UserControl(); Tab2Content=newTab2UserControl(); } privateContentControltab2Content; publicContentControlTab2Content { get { returntab2Content; } set { SetProperty(reftab2Content, value); } } privateContentControltab1Content; publicContentControlTab1Content { get { returntab1Content; } set { SetProperty(reftab1Content, value); } } }
在上述例子中,TabControl包含两个TabItem,分别是"Tab 1"和"Tab 2"。每个TabItem中都包含一个ContentControl,通过绑定ContentControl的Content属性,将ViewModel中的对应内容显示在选项卡中。
需要注意的是,为了在ContentControl中显示不同的内容,我们在ViewModel中定义了两个UserControl类型的属性:Tab1Content和Tab2Content。在ViewModel的构造函数中,我们将具体的UserControl实例赋值给这两个属性。当TabItem被选中时,ContentControl会根据Content属性的值显示不同的内容。