Comment créer un personnalisé WPF XAML de style pour les cases à cocher des images
J'ai un C# WPF Page et sur ce que j'ai mis plusieurs petites images que je veux agir comme des cases à cocher (j'ai mes propres images personnalisées pour planer et certains états).
Je suis de modifier manuellement les images comme:
<Image x:Name="Image_Custom" Source="/Images/checkcircle_off.png" Width="16" Height="16" HorizontalAlignment="Left" Margin="30,107,0,0" VerticalAlignment="Top" MouseEnter="Image_Custom_MouseEnter" MouseLeave="Image_Custom_MouseLeave" MouseUp="Image_Custom_MouseUp" MouseLeftButtonDown="Image_Custom_MouseLeftButtonDown"/>
private void Image_Custom_MouseEnter(object sender, MouseEventArgs e)
{
if (_selected == false)
{
var uriSource = new Uri("/Images/checkcircle_hover.png", UriKind.Relative);
Image_Custom.Source = new BitmapImage(uriSource);
}
}
private void Image_Custom_MouseLeave(object sender, MouseEventArgs e)
{
if (_selected == false)
{
var uriSource = new Uri("/Images/checkcircle_off.png", UriKind.Relative);
Image_Custom.Source = new BitmapImage(uriSource);
}
}
private void Image_Custom_MouseUp(object sender, MouseButtonEventArgs e)
{
if (_selected)
{
var uriSource = new Uri("/Images/checkcircle_off.png", UriKind.Relative);
Image_Custom.Source = new BitmapImage(uriSource);
_selected = false;
}
else
{
var uriSource = new Uri("/Images/checkcircle_on.png", UriKind.Relative);
Image_Custom.Source = new BitmapImage(uriSource);
_selected = true;
}
}
private void Image_Custom_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (_selected)
{
var uriSource = new Uri("/Images/checkcircle_off.png", UriKind.Relative);
Image_Custom.Source = new BitmapImage(uriSource);
_selected = false;
}
else
{
var uriSource = new Uri("/Images/checkcircle_on.png", UriKind.Relative);
Image_Custom.Source = new BitmapImage(uriSource);
_selected = true;
}
}
Cela fonctionne mais est très lourd et je vais avoir jusqu'à 20 cases à cocher.
Comment puis-je créer un personnalisé XAML Style que je peux utiliser pour chaque image ou quelque chose de similaire.
EDIT:
J'ai utilisé le style suivant pour gérer les survolez:
<Page.Resources>
<Style TargetType="Image" x:Key="checkBoxStyle">
<Setter Property="Source" Value="/Images/checkcircle_off.png"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Source" Value="/Images/checkcircle_hover.png"/>
</Trigger>
</Style.Triggers>
</Style>
</Page.Resources>
<Image x:Name="Image_Custom" Style="{StaticResource checkBoxStyle}" Width="16" Height="16" HorizontalAlignment="Left" Margin="30,107,0,0" VerticalAlignment="Top" MouseEnter="Image_Custom_MouseEnter" MouseLeave="Image_Custom_MouseLeave" MouseUp="Image_Custom_MouseUp" MouseLeftButtonDown="Image_Custom_MouseLeftButtonDown"/>
Mais je ne sais pas comment gérer les cliqué événement. Comment puis-je faire cela?
EDIT 2
J'ai fait la suivante:
<Style TargetType="{x:Type CheckBox}" x:Key="myCheckBoxStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type CheckBox}">
<Image x:Name="checkBoxImage" Source="/Images/checkcircle_off.png"></Image>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="checkBoxImage" Property="Source" Value="/Images/checkcircle_on.png"/>
</Trigger>
<Trigger Property="IsChecked" Value="False">
<Setter TargetName="checkBoxImage" Property="Source" Value="/Images/checkcircle_off.png"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="checkBoxImage" Property="Source" Value="/Images/checkcircle_hover.png"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<CheckBox Content="My CheckBox" Style="{StaticResource myCheckBoxStyle}" Width="16" Height="16" Foreground="white" FontSize="16" HorizontalAlignment="Left" Margin="30,242,0,0" VerticalAlignment="Top" />
Les bonnes images apparaissent lors de son survol, activée et désactivée.
Mais j'ai remarqué que le Contenu a disparu ("Ma Case") et aussi je veux seulement l'état de pointage à apparaître lorsqu'elle n'est pas cochée, comment puis-je le faire?
- Je pense que vous devriez le prendre d'une autre manière. Prendre une case à cocher et le faire réagir comme un commutation de l'Image. La seule chose que vous avez à faire est de remplacer Case de contrôle et d'ajouter des propriétés pour spécifier les images pour chaque état. Ensuite, vous définissez le Style de votre nouvelle Case à cocher dans lequel, pour les différents états-vous afficher une image.
- ok vais essayer cela, ne la Case ont une "IsMouseOver' bien ainsi?
- Il a de l'Infobulle de l'état, mais pas de Survol de la propriété.
Vous devez vous connecter pour publier un commentaire.
Dans WPF vous voyez habituellement un contrôle qui a les fonctionnalités dont vous avez besoin, puis vous la faire ressembler à vous le voulez. Donc, si vous voulez
CheckBox
fonctionnalités que vous utilisezCheckBox
de contrôler et de modifier sonTemplate
à être ce que vous voulez. Vous pouvez donc créer desStyle
pourCheckBox
qui mettra votre personnaliséTemplate
et puis il suffit de l'utiliser sur n'importe quel
CheckBox
et vous aurez tous les
CheckBox
la fonctionnalité de votre propre sembleContentPresenter
pour le contenu et l'utilisationMultiTrigger
pour définir survolez l'imageSi vous remplacez Case et de créer un style spécifique, cela va ressembler à ceci:
Associés XAML Style: