2010-07-27 48 views
1

我有一個用戶控件:SnazzyForm,它除了一對邊框和一個標題區域以外,還有一個內容展示器,它在.NET Framework 3.5中呈現的內容以其他形式傳遞給它,使用控件就好了。如何將ContentPropertyAttribute設置爲Content Presenter?

但是,將項目移動到4.0後,我迎接「無法將內容添加到類型對象」等等等等等等。

該控件的代碼隱藏是這樣的:

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 

在管轄本控制ResourceDictionary中的模板是這樣的:

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

我想我真的只是想知道爲什麼我現在有告訴控件使用contentpresenter呈現內容,之前它知道我想要的內容,以及我如何做到這一點。

有什麼想法?

Cory

回答

0

向ContentPresenter添加了Content = {TemplateBinding Property = Content}。

有關此問題的MSDN論壇帖子建議將ContentPropertyAttribute setter添加到控件代碼隱藏,但我無法讓它工作。

Cory

相關問題