2017-07-17 3 views
1

Je wan't pour créer un contrôle personnalisé pour mahapps de faire un contrôle de la tuile customize qui ont la liaison propriété pour le visuel pour faire une icône dans la tuileCréer un contrôle personnalisé dans WPF pour mahapps carreaux

contrôle code XAML

<Style TargetType="{x:Type local:iTile}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:iTile}"> 
       <controls:Tile Title="{TemplateBinding Title}" 
           HorizontalTitleAlignment="Left" 
           HorizontalContentAlignment="Right" 
           Height="100" Width="100" 
           Margin="0" 
           VerticalContentAlignment="Top"> 
        <Rectangle Fill="Black" Height="45" Width="45" Margin="0,10,8,0"> 
         <Rectangle.OpacityMask> 
          <VisualBrush Visual="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Icon}" Stretch="Uniform" /> 
         </Rectangle.OpacityMask> 
        </Rectangle> 
       </controls:Tile> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

contrôle csharp Code

public class iTile : Tile 
{ 
    static iTile() 
    { 
     DefaultStyleKeyProperty.OverrideMetadata(typeof(iTile), new FrameworkPropertyMetadata(typeof(iTile))); 
    } 

    public static readonly DependencyProperty IconProperty = 
    DependencyProperty.Register("Icon", typeof(Object), typeof(iTile), new UIPropertyMetadata()); 

    public Object Icon 
    { 
     get { return GetValue(IconProperty); } 
     set { SetValue(IconProperty, value); } 
    } 
} 

et utilisation comme celui-ci

<iControls:iTile Title="Some Title" 
         Icon="{iconPacks:PackIconMaterial Kind=AccountOff}"/> 

mais l'icône ne montre pas seulement le titre de la tuile.

Répondre

0

Vous pouvez définir la propriété Visual à un PackIconMaterial dans votre modèle:

<ControlTemplate TargetType="{x:Type local:iTile}"> 
    <controls:Tile Title="{TemplateBinding Title}" 
           HorizontalTitleAlignment="Left" 
           HorizontalContentAlignment="Right" 
           Height="100" Width="100" 
           Margin="0" 
           VerticalContentAlignment="Top"> 
     <Rectangle Fill="Black" Height="45" Width="45" Margin="0,10,8,0"> 
      <Rectangle.OpacityMask> 
       <VisualBrush Stretch="Uniform"> 
        <VisualBrush.Visual> 
         <iconPacks:PackIconMaterial Kind="{Binding Icon, RelativeSource={RelativeSource TemplatedParent}}" /> 
        </VisualBrush.Visual> 
       </VisualBrush> 
      </Rectangle.OpacityMask> 
     </Rectangle> 
    </controls:Tile> 
</ControlTemplate> 

... et puis définissez la propriété Icon à une valeur d'énumération:

<iControls:iTile Title="Some Title" 
      Icon="{x:Static iconPacks:PackIconMaterialKind.AccountOff}"/> 
+0

Merci de votre écoute différée, mais pourquoi l'icône n'est pas montrée parce que je peux utiliser du matériel et peut-être utiliser d'autres sources. comment puis-je résoudre ce problème –

+0

"comment puis-je résoudre ce problème"? Est-ce que vous plaisantez? Lisez à nouveau ma réponse et copiez-la sur votre projet. Cela résout votre problème. – mm8

+0

désolé, je veux dire que je veux lier tout le visuel pas gentil –