Silverlight 3不显示自定义控件的默认模板

时间:2009-10-03 02:13:57

标签: silverlight-3.0 controls

Silverlight 3不会显示我正在处理的自定义控件的默认模板。

我的解决方案中有三个项目:

  1. CustomControl.Controls - Silverlight类库
  2. CustomControl.Silverlight - Silverlight应用程序
  3. CustomControl.Silverlight.Web - Web应用程序
  4. 在CustomControl.Controls中我有以下类:

    [TemplateVisualState(Name = "Normal", GroupName = "FocusStates")]
    public class SampleControl : ContentControl
    {
        public SampleControl()
        {
            DefaultStyleKey = typeof(SampleControl);
        }
    
        public override void OnApplyTemplate()
        {
            base.OnApplyTemplate();
            UpdateVisualState(false);
        }
    
        void UpdateVisualState(bool useTransitions)
        {
            VisualStateManager.GoToState(this, "Normal", useTransitions);
        }
    }
    

    主题/ generic.xaml配置为Embeded Resource,包含以下内容:

    <ResourceDictionary
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    
        <Style TargetType="controls:SampleControl">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="controls:SampleControl">
                        <Border Background="Orange" CornerRadius="5" />
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    
    </ResourceDictionary>
    

    最后我在CustomControl.Silverlight中使用MainPage.xaml中的自定义控件:

    <UserControl x:Class="CustomControl.Silverlight.MainPage"
                 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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                 xmlns:sample="clr-namespace:CustomControl.Controls;assembly=CustomControl.Controls"
                 mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
        <StackPanel x:Name="LayoutRoot">
            <sample:SampleControl Width="100" Height="200" />
            <Button Width="100" Height="200" Content="bar" />
        </StackPanel>
    </UserControl>
    

    在浏览器中,SampleControl不可见(它仍然占据200px的高度,所以它就在那里),在它下面,会显示一个按钮。

    我正在使用Visual Studio 2008 SP1 + Silverlight 3工具。

    还有什么我需要做的,以便将Themes / generic.xaml中定义的模板应用于SampleControl吗?

    由于

1 个答案:

答案 0 :(得分:1)

我发现了问题。不应将主题/ generic.xaml添加为“嵌入式资源”,而应添加为“资源”。

我生命中需要数小时的愚蠢错误。 :(