2016-09-20 3 views
0

J'ai une liste d'éléments (boutons simples avec bloc de texte brut) qui sont codés en couleur en fonction du contenu de l'élément de liste. L'utilisateur peut mettre à jour le Listitem et ainsi la couleur de listitem devrait changer. Pour certaines couleurs d'arrière-plan de liste comme "Rouge", je veux aussi ajouter un motif.Modification de la couleur d'arrière-plan à un modèle visuel basé

J'ai ajouté les VisualPatterns suivants en XAML:

<Window.Resources> 
    <VisualBrush x:Key="FwdPattern" TileMode="Tile" Viewport="0,0,15,15" ViewportUnits="Absolute" Viewbox="0,0,15,15" ViewboxUnits="Absolute"> 
     <VisualBrush.Visual> 
      <Grid> 
       <Path Data="M 0 15 L 15 0" Stroke="Gray" /> 
      </Grid> 
     </VisualBrush.Visual> 
    </VisualBrush> 
    <VisualBrush x:Key="BckPattern" TileMode="Tile" Viewport="0,0,15,15" ViewportUnits="Absolute" Viewbox="0,0,15,15" ViewboxUnits="Absolute"> 
     <VisualBrush.Visual> 
      <Grid> 
       <Path Data="M 0 0 L 15 15" Stroke="Gray" /> 
      </Grid> 
     </VisualBrush.Visual> 
    </VisualBrush> 
</Window.Resources> 

modèle de bouton utilisé dans ListItem est:

<Border Background="{Binding BackgroundClr}"> 
    <Button Name="MyButton" Content="Testing"> 
     <Button.Style> 
      <Style TargetType="{x:Type Button}"> 
       <Setter Property="Background" Value="{Binding BackgroundClr}"/> 
       <Style.Triggers> 

       <!-- This does not work, see [http://stackoverflow.com/questions/39583263/brush-mvvm-binding-does-not-give-named-color/39583422#39583422][1] --> 

        <DataTrigger Binding="{Binding BackgroundClr}" Value="Red"> 
         <Setter Property="Background" Value="{StaticResource BckPattern}"/> 
        </DataTrigger> 

       <!-- This does not work either, it goes in infinite loop 
        and StackOverflow exception is thrown- 
        probably because I am reading the background color in 
        the datatrigger and again updating it- but i dont know--> 

        <DataTrigger Binding="{Binding Background.Color, RelativeSource={RelativeSource Self}}" Value="Red"> 
         <Setter Property="Background" Value="{StaticResource BckPattern}"/> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Button.Style> 
    </Button> 
</Border> 

Actuellement je n'ai aucune autre connaissance, sauf le BackgroundClr Bouton de VM pour déterminer si je besoin de fournir un motif ou non.

  • Essayé Solutions

    1. Une solution est d'avoir un PatternName et en fonction propriété-dessus, déterminer quel modèle lié à appliquer:

Le code ci-dessus fonctionne, mais je dois avoir une propriété supplémentaire dans VM

  1. L'autre solution est d'accéder VisualBrush en VM et appliquer directement le modèle dans BackgroundClr - Je n'ai pas compris comment le faire encore.

Quelle est la meilleure solution ou existe-t-il un autre moyen d'obtenir la même chose?

Merci,

Répondre

0
RDV

changement {Binding BackgroundClr}-{Binding BackgroundClr.Color}.