2012-07-03 4 views
1

Я пытаюсь создать ControlTemplate для моего ярлыка, как это:WPF, динамический Цвет заливки прямоугольника

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

Итак, как я могу изменить свойство «Заполнить» в моей контрольной таблице, чтобы установить динамический цвет прямоугольника при создании элемента управления?

спасибо много.

Edit: это решение, я создать новый класс, который наследует от ярлыка, как это:

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

благодарственное много для вас :)

ответ

0

hi set Fill = {TemplateBinding CouleurRectangle}. Надеюсь, это поможет. И я ожидаю, что вы создали собственный класс Label, который наследуется от Label и имеет DependencyProperty CouleurRectangle.

0

Поскольку ваша метка не CustomControl, то вы не можете динамически сделать свойство на том, что таким образом самый лучший способ заключается в использовании свойства фона этикетки

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

Else создать CustomControl наследуя Label и сделать новое свойство зависимостей, а также определить стиль шаблона XAML для него.

Смежные вопросы