2009-08-10 10 views
1

Wenn ich 2 Button s, A und B, ist es möglich, ein Style und ein Trigger, so dass zu erstellen, wenn der Benutzer über Button B schwebt, wird es dazu führen, Button A ‚s Style zu ändern? Ich habe versucht mit SourceName und TargetName, und bekomme Compilerfehler. Hier ist die XAML, dass ich herumalbern mit - ich möchte Button A ‚s Inhalt zu fett gedruckt verursachen, wenn Button B wird moused über:WPF Style-Trigger-on Foreign 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> 

Antwort

0

Trigger s, ihrer Natur nach, werden verwendet, Um Eigenschaften auf dem Element zu ändern, wird der Trigger auf angewendet, nicht andere nicht verwandte Elemente. Es gibt wahrscheinlich einige Hacks, die Sie implementieren könnten, um so etwas zu erreichen, aber ich denke nicht, dass es eine gute Übung wäre oder zu dem passt, was WPF tun soll.

Sie (in der UserControl.Triggers hat Zugriff auf beiden und dann), einbetten könntest btnA und BTNB in eine einzigen benutzer Kontrolle könnte aber das ist nicht logisch Sinn macht für das, was Sie zu tun versuchen. Das macht die Annahme, dass btnA und btnB immer zusammengehören. Ist dies nicht der Fall ist, sollten Sie nur diese auf die altmodische Art und Weise, mit ein paar Ereignisse verdrahten und einige Code-behind:

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

und der 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

Danke für die Antwort . Ich hatte gehofft, dies mit einem einfachen XAML zu tun, aber ich ging mit Ihrem zweiten Vorschlag und es funktioniert gut. – Andy