2010-09-28 28 views
3

如果我在StackPanel內有一組控件,那麼當StackPanel中的任何控件獲得焦點時,是否有一種通用方法來更改堆棧面板的背景? (並且在StackPanel中沒有控件具有焦點時,顯然會將背景切換回來)。以下代碼適用於我,但使用通用方法來完成此任務,而不必在我的頁面中的每個StackPanel中列出每個控件都是很好的做法。當面板中的某個元素具有焦點時更改WPF StackPanel背景顏色

謝謝!

<StackPanel Margin="5"> 
    <StackPanel.Style> 
    <Style TargetType="{x:Type StackPanel}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding IsFocused, ElementName=chkOccupiedByMortgagor}" Value="true"> 
       <Setter Property="Background" Value="Gray" /> 
       <Setter Property="Opacity" Value=".5" /> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding IsFocused, ElementName=chkOccupiedByNewOwner}" Value="true"> 
       <Setter Property="Background" Value="Gray" /> 
       <Setter Property="Opacity" Value=".5" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</StackPanel.Style> 
<CheckBox Margin="2" x:Name="chkOccupiedByMortgagor">Mortgagor</CheckBox> 
<CheckBox Margin="2" x:Name="chkOccupiedByNewOwner">New Owner</CheckBox> 
<CheckBox Margin="2" x:Name="chkOccupiedByTenant">Tenant</CheckBox> 
<CheckBox Margin="2" x:Name="chkOccupiedByUnknownOccupant">Unknown Occupant</CheckBox> 
</StackPanel> 

回答

7

是的。你可以做到這一點。只需使用IsKeyboardFocusWithin屬性爲觸發,就像這樣:

<StackPanel Margin="5"> 
    <StackPanel.Style> 
     <Style TargetType="{x:Type StackPanel}"> 
      <Style.Triggers> 
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsKeyboardFocusWithin}" Value="True"> 
        <Setter Property="Background" Value="Gray" /> 
        <Setter Property="Opacity" Value=".5" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </StackPanel.Style> 
    <CheckBox Margin="2">Mortgagor</CheckBox> 
    <CheckBox Margin="2">New Owner</CheckBox> 
    <CheckBox Margin="2">Tenant</CheckBox> 
    <CheckBox Margin="2">Unknown Occupant</CheckBox> 
</StackPanel> 

千萬記住雖然,你需要告訴觸發查找財產相同的元素,因此,RelativeSource={RelativeSource Self}。或者,您可以命名堆棧面板並使用此xaml:

<StackPanel Margin="5" x:Name="stackPanel"> 
    ... 
       <DataTrigger Binding="{Binding ElementName=stackPanel, Path=IsKeyboardFocusWithin}" Value="True"> 
    ... 
+0

很酷!正是我在找什麼!非常感謝! – 2010-09-30 16:23:31

相關問題