代码之家  ›  专栏  ›  技术社区  ›  CodeWarrior

如何设置内容演示者的ContentPropertyAttribute?

  •  1
  • CodeWarrior  · 技术社区  · 16 年前

    然而,在将项目移动到4.0之后,我被“cannotaddcontenttoobjectoftype”之类的废话打了个招呼。

    因此,控件的代码隐藏为:

    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来呈现内容,而以前它知道这是我想要的,以及我是如何做到的。

    有什么想法吗?

    科里

    1 回复  |  直到 16 年前
        1
  •  0
  •   CodeWarrior    16 年前

    已将Content={TemplateBinding Property=Content}添加到ContentPresenter。

    关于这个问题的MSDN论坛帖子建议将contentpropertyattributesetter添加到codebhind控件中,但我无法让它工作。