2010-07-27 8 views
1

두 개의 테두리와 머리글 영역 및 이것 저것 외에도 .NET Framework 3.5에서 컨트롤을 잘 사용하는 다른 형식으로 전달 된 내용을 제공하는 내용 표시기가있는 Usercontrol : SnazzyForm이 있습니다. .ContentPropertyAttribute를 콘텐츠 발표자로 설정하려면 어떻게해야합니까?

그러나 프로젝트를 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> 

난 정말 내가 지금 가지고있는 이유를 알고 싶은 생각 콘트롤러에게 콘텐트 프리젠터를 사용하여 콘텐트를 제시하고, 이전에 그것이 내가 원했던 것이 무엇인지를 알았을 때, 그리고 어떻게해야 하는지를 알려주는 것.

의견이 있으십니까?

코리

답변

0

ContentPresenter에 Content = {TemplateBinding Property = Content}를 추가했습니다.

이 문제와 관련한 MSDN 포럼 게시물은 ContentBlind 컨트롤에 ContentPropertyAttribute 설정기를 추가 할 것을 제안했지만 작동하지 못했습니다.

코리

관련 문제