L'utilisation des styles dans un modèle de données
J'ai une classe appelée point, et il contient deux propriétés. Je vais les afficher sur l'écran des boutons avec un style. Cette question se rapporte à la façon dont je peux style le bouton de fonction sur le IsSelected valeur, lorsque l'élément que je veux affecter est dans le style de ne pas le modèle de données. J'ai déjà essayé avec un Déclencheur, mais ne parviennent pas à le faire fonctionner.
La classe est ci-dessous.
public class Item : ObservableObject
{
private string _title;
private bool _isSelected;
public string Title
{
get { return _title; }
set
{
_title = value;
RaisePropertyChanged("Title");
}
}
public bool IsSelected
{
get { return _isSelected; }
set
{
_isSelected = value;
RaisePropertyChanged("IsSelected");
}
}
}
- Je utiliser un modèle de données de l'affichage de ces éléments dans un ItemsControls.
<ItemsControl ItemsSource="{Binding Path=Items}" ItemTemplate="{StaticResource ResourceKey=ItemTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
Suivant le style et le modèle de données.
<Style x:Key="ItemButton" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Name="ButtonBorder" BorderThickness="2,2,2,0" BorderBrush="#AAAAAA" CornerRadius="6,6,0,0" Margin="2,20,0,0" Background="Black">
<ContentPresenter
VerticalAlignment="Center"
HorizontalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<DataTemplate x:Key="ItemTemplate">
<Button Height="60" Style="{StaticResource ItemButton}" Name="Button">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Title}"
HorizontalAlignment="Left" Margin="5,5,5,3" FontSize="25" Foreground="#6B6B6B" FontFamily="Arial" />
<Button Style="{StaticResource NoChromeButton}" Margin="0,0,5,0">
<Button.Content>
<Image Height="20" Source="/WpfApplication1;component/Image/dialogCloseButton.png"></Image>
</Button.Content>
<Button.ToolTip>
Close
</Button.ToolTip>
</Button>
</StackPanel>
</Button>
</DataTemplate>
J'ai besoin de changer l'arrière-plan de "ButtonBorder" du Noir au Blanc lorsque IsSelected est Vrai, sur l'Élément objet.
J'ai ajouté dans un Déclencheur dans le Modèle de Données
Cela ne fonctionne pas, je suppose que c'est parce que le modèle remplace le DataTemplate, donc le fond reste blanc. Pourtant, quand j'essaie de faire un déclencheur dans le style, je ne peux pas accéder à la propriété IsSelected?
DataTemplate Déclencher
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsSelected}" Value="True">
<Setter TargetName="Button" Property="Background" Value="White"/>
</DataTrigger>
</DataTemplate.Triggers>
Style de déclenchement
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected}" Value="True">
<Setter Property="Background" Value="White"/>
</DataTrigger>
</Style.Triggers>
Suis-je raté quelque chose?
ItemButton
est utilisé uniquement pour le Item
objet, alors pourquoi ne pas vous venez de consolider le Style dans le Item
's DataTemplate?Ses un commentaire juste, j'ai pris l'habitude de séparer tout ce que les ressources individuelles, ne sais pas si c'est une bonne habitude, mais celui que j'ai collé 🙂
Il rend également les Ressources de l'INTERFACE et de mise en page facile à lire et les modifier si elles ne sont pas encombrées en ligne de Modèles et de Styles.
J'ai l'habitude de simplement Ctrl M,L pour "désencombrer".
OriginalL'auteur JonWillis | 2011-11-17
Vous devez vous connecter pour publier un commentaire.
Faire de votre
ButtonBorder.Background
être{TemplateBinding Background}
, ce qui signifie qu'il va utiliser quelle que soit la couleur d'arrière-plan est attribué à l'basées sur des modèles de Bouton, vous pouvez changer votre Bouton de fond basé sur un DéclencheurJe fais aussi un
SelectableItemButton
Style qui hérite deItemButton
, et juste implémente le déclencheurPuisque vous êtes à l'aide d'un DataTrigger, la liaison est à la recherche à
Button.DataContext.IsSelected
et changer la couleur de fond si la valeur existe et il est Vrai. Vous pourrait techniquement faire un Bouton et lui donner un DataContext d'une Case de l'objet et il serait sans doute travailler, bien que je ne recommande pas que 🙂OriginalL'auteur Rachel
Ne devrait pas être la cible "ButtonBorder" au lieu de "Bouton", dans :
Également, accès à la propriété
IsSelected
vous devez définir laTargetType
dans le style ....TargetType est mis sur le style, il est réglé sur "Bouton". Le modèle de données crée un bouton et le contenu, puis sur le bouton, il crée a la ItemButton style est appliqué.
OriginalL'auteur loxxy