1

次のように、Label の ControlTemplate を作成しようとしています。

<Style TargetType="{x:Type Label}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Label}">
                <Grid x:Name="LayoutRoot" Background="White">
                    <Rectangle Height="30" HorizontalAlignment="Left" Margin="10" 
                               Stroke="transparent" 
                               VerticalAlignment="Top" Width="3" 
                               Fill="#FF259FED" />

                    <ContentPresenter HorizontalAlignment="Left" Margin="17,0,0,0"  RecognizesAccessKey="True" 
                                      SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
                                      VerticalAlignment="Center"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Foreground" Value="#7A7E81" />
    <Setter Property="FontWeight" Value="Bold" />
</Style>

たとえば、次のように、コントロールを作成するときに四角形の色を塗りつぶしたい:

<Label Content="Prénom" VerticalAlignment="Top" CouleurRectangle="#FF259FED" />

では、controlTemplate のプロパティ「Fill」を変更して、コントロールを作成するときに四角形の色を動的に設定するにはどうすればよいですか?

どうもありがとう。

編集:これが解決策です。次のようにLabelから継承する新しいクラスを作成します:

    Public Class LblTitreChamp
    Inherits Label

    Public Shared ReadOnly CouleurProperty As DependencyProperty =
        DependencyProperty.Register("CouleurRectangle", GetType(SolidColorBrush), GetType(LblTitreChamp))
    ''' <summary>Propriété pour insérer une couleur au début du Label</summary>
    Public Property CouleurRectangle As SolidColorBrush
        Get
            Return GetValue(CouleurProperty)
        End Get
        Set(ByVal value As SolidColorBrush)
            SetValue(CouleurProperty, value)
        End Set
    End Property

End Class

次に、私の CONtrolTemplate で:

<Style TargetType="{x:Type local:LblTitreChamp}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:LblTitreChamp}">
                    <Grid x:Name="LayoutRoot" Background="White">
                        <Rectangle Height="30" HorizontalAlignment="Left" Margin="10" 
                                   Stroke="transparent" 
                                   VerticalAlignment="Top" Width="3" 
                                  Fill="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Label}}, Path=CouleurRectangle}"/>

                        <ContentPresenter HorizontalAlignment="Left" Margin="17,0,0,0"  RecognizesAccessKey="True" 
                                          SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
                                          VerticalAlignment="Center"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="Foreground" Value="#7A7E81" />
        <Setter Property="FontWeight" Value="Bold" />
    </Style>

最後に、新しいラベルを作成するには:

<my:LblTitreChamp Content="ID" VerticalAlignment="Top" CouleurRectangle="Black" />

どうもありがとうございます:)

4

2 に答える 2

0

hi set Fill={TemplateBinding CouleurRectangle} .これが役立つことを願っています。そして、Label から継承し、DependencyProperty CouleurRectangle を持つカスタム Label クラスを作成したことを期待しています。

于 2012-07-03T08:25:07.807 に答える
0

ラベルは ではないためCustomControl、動的にプロパティを作成することはできないため、可能な最善の方法は、ラベルの背景プロパティを使用することです

...
<Rectangle Height="30" ...
                       Fill="{TemplateBinding Background}" />
...

それ以外の場合は、CustomControl継承Labelを作成し、新しい依存関係プロパティを作成し、XAML テンプレート スタイルも定義します。

于 2012-07-03T08:28:59.567 に答える