2010-07-27 17 views
1

J'ai un Usercontrol: SnazzyForm, qui en plus de deux bordures et une zone d'en-tête et autres joyeusetés, a aussi un Content Presenter qui sous .NET Framework 3.5 a présenté le contenu dans d'autres formulaires qui ont utilisé le contrôle .Comment puis-je définir ContentPropertyAttribute dans un présentateur de contenu?

Cependant, après avoir déplacé le projet à 4.0 je suis accueilli avec "Impossible d'ajouter du contenu à l'objet de type" blah blah blah.

Le behind pour le contrôle est donc:

Imports System 
Imports System.IO 
Imports System.Windows 
Imports System.Windows.Controls 
Imports System.Windows.Data 
Imports System.Windows.Media 
Imports System.Windows.Media.Animation 
Imports System.ComponentModel 
Public Class SnazzyForm 
    Inherits ContentControl 

    Public Shared TitleProperty As DependencyProperty = DependencyProperty.Register("Title", GetType(String), GetType(SnazzyForm)) 

    <Description("Title to display"), _ 
     Category("Custom")> _ 
    Public Property Title() As String 
     Get 
      Return CType(GetValue(TitleProperty), String) 
     End Get 
     Set(ByVal value As String) 
      SetValue(TitleProperty, value) 
     End Set 
    End Property 

    Shared Sub New() 
     ' Insert code required on object creation below this point. 
     DefaultStyleKeyProperty.OverrideMetadata(GetType(SnazzyForm), New FrameworkPropertyMetadata(GetType(SnazzyForm))) 
    End Sub 
End Class 

Le modèle dans le ResourceDictionary qui régit ce contrôle est donc:

<Style TargetType="{x:Type local:SnazzyForm}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type local:SnazzyForm}"> 
        <ControlTemplate.Resources> 
         <Style TargetType="{x:Type Border}" x:Key="formOuterBorderStyle"> 
          <Setter Property="Margin" Value="22,22,22,3" /> 
          <Setter Property="Padding" Value="0" /> 
          <Setter Property="BorderBrush" Value="{StaticResource BrushBorder}" /> 
          <Setter Property="BorderThickness" Value="3" /> 
          <Setter Property="Background" Value="{StaticResource BrushBackgroundDark}" /> 
          <Setter Property="CornerRadius" Value="20,20,0,0" /> 
         </Style> 
         <Style TargetType="{x:Type TextBlock}" x:Key="formTitleStyle"> 
          <Setter Property="Foreground" Value="{StaticResource BrushWhiteSmoke}" /> 
          <Setter Property="FontFamily" Value="Verdana" /> 
          <Setter Property="FontSize" Value="16" /> 
          <Setter Property="Padding" Value="11,7,7,7" /> 
          <Setter Property="VerticalAlignment" Value="Stretch" /> 
          <Setter Property="HorizontalAlignment" Value="Stretch" /> 
         </Style> 
         <Style TargetType="{x:Type TextBlock}" x:Key="formBreadcrumbStyle"> 
          <Setter Property="Foreground" Value="{StaticResource BrushWhiteSmoke}" /> 
          <Setter Property="FontFamily" Value="Verdana" /> 
          <Setter Property="FontSize" Value="11" /> 
          <Setter Property="Padding" Value="7" /> 
          <Setter Property="VerticalAlignment" Value="Stretch" /> 
          <Setter Property="HorizontalAlignment" Value="Stretch" /> 
         </Style> 

         <Style TargetType="{x:Type Rectangle}" x:Key="formBackgroundRectangleStyle"> 
          <Setter Property="Fill" Value="{StaticResource BrushABCLight}" /> 
         </Style> 

         <Style TargetType="{x:Type Border}" x:Key="formTitleBorderStyle"> 
          <Setter Property="BorderBrush" Value="{StaticResource BrushBlack}" /> 
          <Setter Property="BorderThickness" Value="0,0,0,2" /> 
         </Style> 

        </ControlTemplate.Resources> 
        <AdornerDecorator d:DesignWidth="640" d:DesignHeight="480"> 
         <Grid Width="Auto" Height="Auto"> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="40"/> 
           <RowDefinition Height="40"/> 
           <RowDefinition Height="*"/> 
          </Grid.RowDefinitions> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="*"/> 
           <ColumnDefinition Width="40"/> 
          </Grid.ColumnDefinitions> 
          <TextBlock HorizontalAlignment="Left" Margin="0" VerticalAlignment="Top" FontFamily="Arial" FontSize="18.667" Foreground="#FFE0E0E0" Text="{TemplateBinding Title}" TextWrapping="Wrap" Panel.ZIndex="2" Visibility="Collapsed"/> 
          <Path Fill="Black" Stretch="Fill" Stroke="{x:Null}" Margin="0" VerticalAlignment="Stretch" Height="Auto" Grid.Column="1" Grid.Row="0" Data="M0.5,0.5 L39.5,39.5 0.5,39.5 z"/> 
          <Border Background="Black" Margin="0" VerticalAlignment="Stretch" Height="Auto" Grid.Row="0" CornerRadius="10,0,0,0"/> 
          <!-- <Rectangle Fill="Black" Stroke="Black" Margin="0" VerticalAlignment="Stretch" Height="Auto" Grid.Row="0"/> --> 
          <Rectangle Stroke="{x:Null}" Margin="0" Height="Auto" Opacity="0.5" Grid.ColumnSpan="2" Grid.Row="3" Grid.RowSpan="1"> 
           <Rectangle.Fill> 
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
             <GradientStop Color="#FF222222" Offset="0"/> 
             <GradientStop Color="#FFB3B3B3" Offset="1"/> 
            </LinearGradientBrush> 
           </Rectangle.Fill> 
          </Rectangle> 
          <Rectangle Fill="Black" Stroke="Black" Margin="0" Grid.ColumnSpan="2" Grid.Row="1"/> 
          <Rectangle Fill="{TemplateBinding Background}" Stroke="Black" Margin="0" Height="Auto" Panel.ZIndex="-7" Grid.ColumnSpan="2" Grid.Row="2" Grid.RowSpan="1"/> 
          <Border x:Name="bdr" Style="{StaticResource formOuterBorderStyle}" Margin="0" Grid.ColumnSpan="2" Grid.RowSpan="3" d:LayoutOverrides="Width, Height" d:IsHidden="True" Visibility="Collapsed"/> 
          <Grid Margin="3" Grid.ColumnSpan="2" Grid.RowSpan="3"> 
           <Grid.RowDefinitions> 
            <RowDefinition Height="Auto" MinHeight="77" /> 
            <RowDefinition MinHeight="400" /> 
           </Grid.RowDefinitions> 
           <Border Style="{StaticResource formTitleBorderStyle}" BorderBrush="{x:Null}"> 
            <StackPanel Margin="0"> 
             <TextBlock Text="{Binding ViewModelFriendlyName}" Style="{StaticResource formTitleStyle}" /> 
             <TextBlock Margin="11,0,0,0" Text="{Binding BreadcrumbTrail}" Style="{StaticResource formBreadcrumbStyle}" /> 
            </StackPanel> 
           </Border> 
           <Rectangle Grid.Row="1" Style="{StaticResource formBackgroundRectangleStyle}" Visibility="Collapsed" /> 

           <!--Put the form below here--> 
           <ContentPresenter x:Name="ContentPresenterX" Grid.Row="1" Margin="0" />  
           <!--Put the form above here--> 

          </Grid> 
         </Grid> 
        </AdornerDecorator> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

Je suppose que je veux juste savoir pourquoi j'ai maintenant dire au contrôle d'utiliser le contentpresenter pour présenter le contenu, alors qu'auparavant il savait ce que je voulais, et aussi comment je le fais.

Des pensées?

Cory

Répondre

0

Ajouté Contenu = {TemplateBinding propriété = Contenu} à ContentPresenter.

MSDN Le post du forum concernant ce problème a suggéré d'ajouter le setter ContentPropertyAttribute aux contrôles codebehind, mais je n'ai pas réussi à le faire fonctionner.

Cory