2009-08-10 6 views
1

Si j'ai 2 Button s, A et B, est-il possible de créer un Style et un Trigger de telle sorte que lorsque l'utilisateur passe au-dessus Button B, il fera Button A « s Style changer? J'ai essayé d'utiliser SourceName et TargetName, et je reçois des erreurs de compilation. Voici le XAML que je suis rigoler avec - je voudrais faire du contenu à Button A quand Button B gras est plus mouchetés:WPF style Trigger sur l'étranger UIElement

<Window x:Class="WpfApplication1.Window4" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="Window4" Height="300" Width="300"> 

<Window.Resources> 
    <Style x:Key="BoldWhenOver" TargetType="{x:Type Button}"> 
     <Style.Triggers> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Setter Property="FontWeight" Value="Bold" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 

<StackPanel> 
    <Button Name="btnA" Content="A" Style="{StaticResource BoldWhenOver}" /> 
    <Button Name="btnB" Content="B" /> 
</StackPanel> 

Répondre

0

Trigger s, par leur nature, sont utilisés pour modifier les propriétés de l'élément, le déclencheur est appliqué à, et non à d'autres éléments non liés. Il y a probablement des hacks que vous pourriez implémenter pour que quelque chose de ce genre arrive, mais je ne pense pas que ce soit une bonne pratique ou une adaptation à ce que WPF est censé faire.

Vous pouvez intégrer dans un seul utilisateur contrôle BTAN et BTNB (et avoir accès à la fois dans les UserControl.Triggers), mais peut-être pas de sens logique pour ce que vous essayez de faire. Cela fait supposer que btnA et btnB appartiennent toujours ensemble. Si ce n'est pas le cas, vous devriez juste câbler ce la voie à l'ancienne, avec des événements de couple et un code-behind:

<StackPanel> 
    <Button Name="btnA" Content="A"/> 
    <Button Name="btnB" Content="B" MouseEnter="btnB_MouseEnter" MouseLeave="btnB_MouseLeave"/> 
</StackPanel> 

Et le code:

private void btnB_MouseEnter(object sender, MouseEventArgs e) 
{ 
    btnA.FontWeight = FontWeights.Bold; 
} 

private void btnB_MouseLeave(object sender, MouseEventArgs e) 
{ 
    btnA.FontWeight = FontWeights.Normal; 
} 
+0

Merci pour la réponse . J'espérais faire cela avec un XAML simple, mais je suis allé avec votre 2ème suggestion et ça marche bien. – Andy

Questions connexes