2009-08-10 86 views
1

如果我有2個Button S,AB,是有可能創造一個StyleTrigger這樣,當用戶將鼠標懸停Button B,就會造成Button AStyle改變?我試過使用SourceNameTargetName,並且出現編譯器錯誤。下面是我與打打鬧鬧的XAML - 我想引起Button A的內容進行加粗時Button B位於鼠標在:WPF樣式觸發國外的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> 

回答

0

Trigger S,根據其性質,使用要更改元素上的屬性,觸發器應用於,而不是其他不相關的元素。可能會有一些黑客可以實現這樣的事情,但我認爲這不是一種好的做法,也不符合WPF的意圖。

您可以嵌入btnAbtnB成一個單一的用戶控件(然後必須在UserControl.Triggers同時訪問),但可能不會邏輯上是爲了什麼你正在嘗試做的。這使得btnA和btnB總是屬於一起的假設。如果不是的話,你應該這樣使用老式的方式,與一對夫婦的事件以及一些後臺代碼:

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

,代碼:

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

感謝您的回答。我希望能用一些簡單的XAML來做到這一點,但我用你的第二個建議去做,它運行良好。 – Andy 2009-08-10 19:43:59