ToggleButtonのスタイルを設定して、押すと色が変わり、もう一度押すまでその色を維持したいと思います。現在、マウスオーバーを押すと色が元に戻り、マウスはトグルボタンを離れます。マウスオーバーの色の変更を取り除いたので、色をチェック状態に設定できましたが、マウスオーバーの効果を失いたくありません。両方を持つ方法はありますか?私は独自のエキスパンダーを作成し、コントロールの作成について自分自身に教えましたが、マウスオーバーと押された色の両方を設定する方法を理解できません。私の例では、ボタンがクリック/チェックされていない場合にのみマウスオーバーをリセットする必要があります。私はこのToggleButtonスタイルを使用しています:http://msdn.microsoft.com/en-us/library/cc296245(v = vs.95).aspx
3188 次
2 に答える
2
備考セクションの下にあるこのMSDNリンクは次のように主張しています。
ControlTemplateは、VisualStateオブジェクトをControlTemplateのVisualStateGroupに作成して、コントロールの視覚的な動作を指定します。相互に排他的な状態を同じVisualStateGroupに配置します。たとえば、CheckBoxには2つのVisualStateGroupオブジェクトがあります。1つには、Normal、MouseOver、Pressed、およびDisabledの状態が含まれています。もう1つには、Checked、UnChecked、およびIndeterminateの状態が含まれます。CheckBoxは、MouseOver状態とUnChecked状態を同時に持つことができますが、MouseOver状態とPressed状態を同時に持つことはできません。
私はSilverlightにかなり慣れていませんが、境界線や長方形などの2番目のコントロールを使用する必要があるようです。これがオプションかどうかはわかりませんが、マウスの境界線ブラシの色を変更するように設定することもできます。以上。
于 2011-08-03T16:56:23.840 に答える
1
トリガーの順序は重要です。このスタイルは、指定したとおりに機能します。
<Style x:Key="{x:Type ToggleButton}" TargetType="{x:Type ToggleButton}">
<Setter Property="Foreground" Value="White" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Border Name="Border" BorderThickness="1" Background="Gray" BorderBrush="Gray">
<ContentPresenter Name="ContentHost" Margin="8,3" HorizontalAlignment="Center" VerticalAlignment="Center" RecognizesAccessKey="true" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="Border" Property="Background" Value="Yellow" />
<Setter TargetName="Border" Property="BorderBrush" Value="Yellow" />
</Trigger>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="Border" Property="Background" Value="Red" />
<Setter TargetName="Border" Property="BorderBrush" Value="Red" />
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter TargetName="Border" Property="Background" Value="Green" />
<Setter TargetName="Border" Property="BorderBrush" Value="Green" />
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter TargetName="Border" Property="Opacity" Value="0.25" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
于 2011-08-02T18:16:02.787 に答える