我是Silverlight的新手,我想完成一个相对简单的任务:
创建一个“面板”控件,该控件将显示标题和一些子内容。
我能够在一定程度上完成这项工作,但XAML的位置确实让我困惑。
在我的页面上,我使用我的控件。这导致我的面板在子内容区域显示一个蓝色的按钮,顶部有一个20px的黄色标题,上面写着“下面是一些内容”。
<UserControl x:Class="SilverlightApplication9.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:SilverlightApplication9">
<Grid Background="White">
<local:MyPanel Background="Blue">
<Button Width="50" Height="25" Content="Hello"></Button>
</local:MyPanel>
</Grid>
</UserControl>
我的面板源代码很简单,只是:
public partial class MyPanel : ContentControl
{
public MyPanel()
{
DefaultStyleKey = typeof(MyPanel);
InitializeComponent();
}
}
它是一个分部类,并且有一个附加的XAML文件,这就是我开始混淆的地方:
如果我尝试将样式/模板代码放入分部类XAML文件中,它似乎被忽略(显示了我的按钮,但缺少其他内容,如颜色和文本)。
<ContentControl x:Class="SilverlightApplication9.MyPanel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:SilverlightApplication9">
<ContentControl.Resources>
<ResourceDictionary>
<Style TargetType="local:MyPanel">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:MyPanel">
<Grid Background="Yellow">
<Grid.RowDefinitions>
<RowDefinition Height="20" />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock HorizontalAlignment="Center" Height="20" Grid.Row="0" Text="Below is some content"/>
<Grid Grid.Row="1" Background="LightBlue">
<ContentPresenter />
</Grid>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
</ContentControl.Resources>
</ContentControl>
但是,如果我创建一个\themes\generic.xaml文件并粘贴在同一代码中,它就会工作。
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:SilverlightApplication9"
xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"
>
<Style TargetType="local:MyPanel">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:MyPanel">
<Grid Background="Yellow">
<Grid.RowDefinitions>
<RowDefinition Height="20" />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock HorizontalAlignment="Center" Height="20" Grid.Row="0" Text="Below is some content"/>
<Grid Grid.Row="1" Background="LightBlue">
<ContentPresenter />
</Grid>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
显然,我缺少一些关于如何在项目中处理或使用资源或XAML文件的重要信息(我在Silverlight之前没有任何WPF经验)。
我做错了什么,使我无法将面板的模板代码放入面板的XAML文件中?是否有一些关于XAML和资源的概念我弄错了?