Silverlight 3 не отображает шаблон по умолчанию для пользовательского элемента управления - PullRequest
0 голосов
/ 03 октября 2009

Silverlight 3 не отображает шаблон по умолчанию для пользовательского элемента управления, над которым я работаю.

В моем решении три проекта:

  1. CustomControl.Controls - Библиотека классов Silverlight
  2. CustomControl.Silverlight - Приложение Silverlight
  3. CustomControl.Silverlight.Web - веб-приложение

В 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);
    }
}

Themes / generic.xaml настроен как встроенный ресурс и содержит следующее:

<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>

Наконец, я использую пользовательский элемент управления внутри MainPage.xaml в CustomControl.Silverlight:

<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 не виден (он по-прежнему занимает 200 пикселей в высоту, поэтому он есть), а под ним отображается кнопка.

Я использую Visual Studio 2008 SP1 + Silverlight 3 Tools.

Что еще мне нужно сделать, чтобы шаблон, определенный в Themes / generic.xaml, был применен к SampleControl?

Спасибо

1 Ответ

1 голос
/ 03 октября 2009

Я нашел проблему. Themes / generic.xaml следует добавлять не как «Embeded Resource», а как «Resource».

Тупая ошибка, которая заняла часы моей жизни. (

...