2016-06-28 12 views
0

を与えられて、私はこのToggleButtonを持っている:EventTriggerが焦点

<ToggleButton x:Name="buttonStudentPicker" Content="Student Picker" HorizontalAlignment="Right" Margin="2,10,2,10" BorderThickness="0,5,0,0" Background="{x:Null}"> 
    <ToggleButton.LayoutTransform> 
     <RotateTransform Angle="90"/> 
    </ToggleButton.LayoutTransform> 
    <ToggleButton.Style> 
     <Style TargetType="ToggleButton"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding ElementName=buttonBibleReadingMain, Path=IsFocused, Mode=OneWay}" Value="True"> 
        <Setter Property="IsChecked" Value="True"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ToggleButton.Style> 
</ToggleButton> 

私は2つの関連する問題があります。まず、私は実際にこのボタンをトグルさせるいくつかの要素をインターフェイス上に持っています。現時点では、私はすべての要素を同時に集中させることができないので、1つの要素に基づいてこれを行う方法を試すことしかできません。基本的に:

If button a or button b or button c has just been clicked 
    Toggle student picker button to true 

関連の問題は、私はそれが一つの制御のために働いて、トグル火災持ちながら、私が入れた瞬間にトグルがオフに別のコントロールに焦点を当てる、ということです。私はそれを本当に望んでいない。理想的には、ボタンがフォーカスを獲得したときにトグルが既にオフになっていた場合は、はい、トグルをもう一度オフにする必要があります。しかし、それはすでに見えていた、それはトグルオフするべきではありません。

理想的にはMultiDataTriggerを使用しますが、すべての条件が真でなければならないことがわかったので、理想的です。

<ToggleButton x:Name="buttonStudentPicker" Content="Student Picker" HorizontalAlignment="Right" Margin="2,10,2,10" BorderThickness="0,5,0,0" Background="{x:Null}"> 
    <ToggleButton.LayoutTransform> 
     <RotateTransform Angle="90"/> 
    </ToggleButton.LayoutTransform> 
    <ToggleButton.Style> 
     <Style TargetType="ToggleButton"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding ElementName=buttonBibleReadingMain, Path=IsPressed, Mode=OneWay}" Value="True"> 
        <Setter Property="IsChecked" Value="True"/> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding ElementName=buttonBibleReadingClass1, Path=IsPressed, Mode=OneWay}" Value="True"> 
        <Setter Property="IsChecked" Value="True"/> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding ElementName=buttonBibleReadingClass2, Path=IsPressed, Mode=OneWay}" Value="True"> 
        <Setter Property="IsChecked" Value="True"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ToggleButton.Style> 
</ToggleButton> 

私はそれが動作し、それがないが、それが使用する権利財産でないかどうかを確認するためにIsPressedをしようと考えた:hereから私はDataTriggersのセットを行うことを決めました。

私は正しいことができません。ボタンをクリックすると、トグルが真になるようトリガーされます。しかし何もしないでください。

泥が澄んでいますか?

更新:ボタンにクリックハンドラーを追加した場合。例:

<Button Name="buttonBibleReadingMain" Grid.Column="1" Background="Transparent" Click="buttonBibleReadingMain_Click"> 
    <Image Source="Images/AssignmentTypeBibleReading.png" Margin="2"/> 
</Button> 

そして、これを入れて、コードビハインドである:

private void buttonBibleReadingMain_Click(object sender, RoutedEventArgs e) 
{ 
    buttonStudentPicker.IsChecked = true; 
} 

それはとしては、欲しいものを行います。ボタンをクリックすると、パネルが表示されます。そして、パネルは私が望む限り、目に見えています。しかし、パネルを強制的に表示させたいそれぞれのコントロールに対して、これを行う必要があります。

+0

ボタンをクリックしてトグルボタンが既にチェックされている場合はどうなりますか?チェックを外すか、何もしないでください。 – Jose

+0

@キレネンコこの時点で、私はトグルをtrueに設定してパネルをオンに切り替えるトリガーと感じています。それを元に戻すのはユーザー次第です。 –

+0

さて、私はあなたがコードの背後にあるべきだと思います。 3つのボタンに同じクリックイベントを使用できます。 – Jose

答えて

0

あなたはMultiDataTriggerは、このためのORではなくAND、のように作業することができます:

(AとB)< =>¬(¬Aまたは¬B)

<MultiDataTrigger> 
    <MultiDataTrigger.Conditions> 
     <Condition Binding="{Binding ElementName=buttonBibleReadingMain, Path=IsPressed, Mode=OneWay}" Value="false" /> 
     <Condition Binding="{Binding ElementName=buttonBibleReadingClass1, Path=IsPressed, Mode=OneWay}" Value="false" /> 
     <Condition Binding="{Binding ElementName=buttonBibleReadingClass2, Path=IsPressed, Mode=OneWay}" Value="false" /> 
    </MultiDataTrigger.Conditions> 
    <Setter Property="IsChecked" Value="false"/> 
</MultiDataTrigger> 

ですから、falseにすべての真の値を反転し、ヨーヨーのデフォルト値を設定します。あなたのコードに適用されますur tooglebutton.IsCheckedがtrueに設定されています。そうすれば、すべてのボタンが押されていないと、あなたはあなたのGoogleボタンをチェックしないようにすることができます。

+0

ありがとうございます。しかし、これはまだ私が恐れて欲しいものではありません。私は私の質問を更新しようとしています。 –

関連する問題