2012-03-26 105 views
0

我創建了一個用於我的應用程序的UserControl。它由一個Grid中的ComboBox和兩個RepeatButton組成。此控件適用於將在裝有觸摸屏的筆記本電腦上運行的應用程序。這些按鈕用於選擇ComboBox中的下一個或上一個選擇。這裏是Xaml的控制:如何使這個觸發器工作?

<UserControl x:Class="CarSystem.CustomControls.TouchComboBox" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:cs="clr-namespace:CarSystem.CustomControls" 
      mc:Ignorable="d" 
      Focusable="True" 
      GotFocus="UserControl_GotFocus"> 

    <UserControl.Resources> 
     <Style x:Key="FocusedStyle" TargetType="{x:Type ComboBox}"> 
      <Style.Triggers> 
       <Trigger Property="IsFocused" Value="True"> 
        <Setter Property="Background" Value="{DynamicResource FocusedBackground}" /> 
        <Setter Property="Foreground" Value="{DynamicResource FocusedForeground}" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </UserControl.Resources> 

    <Grid Background="{Binding Path=GridBackground, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type cs:TouchComboBox}}}" 
      Width="{Binding Path=Width, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type cs:TouchComboBox}}}"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="Auto" /> 
      <ColumnDefinition Width="Auto" /> 
     </Grid.ColumnDefinitions> 

     <ComboBox Background="{Binding Path=Background, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type cs:TouchComboBox}}}" 
        BorderBrush="{Binding Path=BorderBrush, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type cs:TouchComboBox}}}" 
        DisplayMemberPath="{Binding Path=DisplayMemberPath, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type cs:TouchComboBox}}}" 
        FlowDirection="{Binding Path=FlowDirection, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type cs:TouchComboBox}}}" 
        Focusable="True" 
        FontFamily="{Binding Path=FontFamily, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type cs:TouchComboBox}}}" 
        FontSize="{Binding Path=FontSize, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type cs:TouchComboBox}}}" 
        FontStretch="{Binding Path=FontStretch, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type cs:TouchComboBox}}}" 
        FontStyle="{Binding Path=FontStyle, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type cs:TouchComboBox}}}" 
        FontWeight="{Binding Path=FontWeight, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type cs:TouchComboBox}}}" 
        Foreground="{Binding Path=Foreground, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type cs:TouchComboBox}}}" 
        HorizontalAlignment="{Binding Path=HorizontalAlignment, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type cs:TouchComboBox}}}" 
        HorizontalContentAlignment="{Binding Path=HorizontalContentAlignment, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type cs:TouchComboBox}}}" 
        Grid.Column="0" 
        ItemsSource="{Binding Path=ItemsSource, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type cs:TouchComboBox}}}" 
        Name="ChoicesPicker" 
        SelectedIndex="{Binding Path=SelectedIndex, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type cs:TouchComboBox}}}" 
        SelectedValue="{Binding Path=SelectedValue, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type cs:TouchComboBox}}}" 
        SelectedValuePath="{Binding Path=SelectedValuePath, Mode=TwoWay,RelativeSource={RelativeSource AncestorType={x:Type cs:TouchComboBox}}}" 
        SelectionChanged="ChoicesPicker_SelectionChanged" 
        Style="{StaticResource FocusedStyle}" 
        TabIndex="{Binding Path=TabIndex, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type cs:TouchComboBox}}}" 
        VerticalAlignment="Center"/> 
     <RepeatButton Background="{DynamicResource ButtonBackground}" 
         Click="SelectPreviousButton_Click" 
         Focusable="False" 
         Foreground="{DynamicResource ButtonForeground}" 
         Grid.Column="1" 
         IsTabStop="False" 
         Name="SelectPreviousButton"> 
      <Image Source="/CustomControls;component/Resources/VolumeUp.png" /> 
     </RepeatButton> 
     <RepeatButton Background="{DynamicResource ButtonBackground}" 
         Click="SelectNextButton_Click" 
         Focusable="False" 
         Foreground="{DynamicResource ButtonForeground}" 
         Grid.Column="2" 
         IsTabStop="False" 
         Name="SelectNextButton"> 
      <Image Source="/CustomControls;component/Resources/VolumeDown.png" /> 
     </RepeatButton> 
    </Grid> 
</UserControl> 

我希望背景和前景畫刷改變,當組合框獲得焦點。 UserControl Resources中名爲「FocusedStyle」的樣式應該爲我做這件事,但它不起作用。背景和ForeGround顏色永遠不會改變。

我的代碼有什麼問題?

託尼

回答

1

不能從樣式,如果該屬性在實際控制設置,因爲在控制設置的任何屬性優先設置屬性。

試試這個:

<UserControl.Resources> 
    <Style x:Key="FocusedStyle" TargetType="{x:Type ComboBox}"> 
     <Style.Triggers> 
      <Trigger Property="IsFocused" Value="True"> 
       <Setter Property="Background" Value="{DynamicResource FocusedBackground}" /> 
       <Setter Property="Foreground" Value="{DynamicResource FocusedForeground}" /> 
      </Trigger> 
      <Trigger Property="IsFocused" Value="False"> 
       <Setter Property="Background" Value="{DynamicResource UnFocusedBackground}" /> 
       <Setter Property="Foreground" Value="{DynamicResource UnFocusedForeground}" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</UserControl.Resources> 

然後,你需要做出正常的背景的DynamicResource。

然後取出

Background="{Binding Path=Background, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type cs:TouchComboBox}}}" 

Foreground="{Binding Path=Foreground, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type cs:TouchComboBox}}}" 
從ComboBox

這種方式觸發器將能夠設置屬性的值,因爲屬性不是由控件本身設置。

+0

謝謝,就是這樣! – 2012-03-27 12:55:28