2012-03-26 9 views
0

私は自分のアプリケーションで使用するためにUserControlを作成しました。 2つのリピートボタンを持つグリッド内のComboBoxで構成されています。このコントロールは、タッチスクリーン付きのラップトップで実行されるアプリケーションで使用するためのコントロールです。ボタンは、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リソースの "FocusedStyle"という名前のスタイルは私のためにこれを行うはずですが、機能しません。背景とForeGroundの色は決して変化しません。

私のコードで何が問題になっていますか?

トニー

答えて

1

コントロールに設定された任意のプロパティが優先されるため、そのプロパティは、実際の制御に設定されている場合は、スタイルからプロパティを設定することはできません。そして、あなたは、通常のバックグラウンドのDynamicResourceを作成する必要があり

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

はこれを試してみてください。

そしてコンボボックスから

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}}}" 

を除去します。

この方法では、コントロール自体によってプロパティが設定されていないため、トリガはプロパティの値を設定できます。

+0

ありがとうございました! –

関連する問題