0

StackPanels を含む分割ビューがあります。それらの StackPanels のそれぞれにカーソルを合わせたときに色を変更するスタイルを定義したいのですが、これは可能ですか?

これは私のコードです:

 <StackPanel Orientation="Horizontal" Style="{Binding Source={StaticResource HyperlinkPointerOverForegroundThemeBrush}}" >
                    <Button x:Name="MenuButton1"
                    Width="50" Height="50" Background="Transparent">
                        <Button.Content>
                            <Image Source="images/chercher.png"></Image>
                        </Button.Content>
                    </Button>
                    <TextBlock Text="Resultats" FontSize="18" VerticalAlignment="Center" Foreground="#727271"/>
                </StackPanel>

そして、私はそのようなスタイルを定義しました:

 <SolidColorBrush x:Key="HyperlinkButtonBackgroundThemeBrush" Color="#e6e6e6" />
        <SolidColorBrush x:Key="HyperlinkButtonBorderThemeBrush" Color="#e6e6e6" />
        <SolidColorBrush x:Key="HyperlinkDisabledThemeBrush" Color="#e6e6e6" />
        <SolidColorBrush x:Key="HyperlinkForegroundThemeBrush" Color="#e6e6e6" />
        <SolidColorBrush x:Key="HyperlinkPointerOverForegroundThemeBrush" Color="#e6e6e6" />
        <SolidColorBrush x:Key="HyperlinkPressedForegroundThemeBrush" Color="#e6e6e6" />

しかし、ホバーしても、StackPanels Foreground はどれも変更されていません

手伝ってくれてありがとう

4

1 に答える 1

1

スタイルだけではできないと思います。ただし、本当にスタイルを使用したい場合は、動作と組み合わせることができます。この動作では、PointerEntered および PointerExited イベントを使用して、新しい背景を設定できます。次に、動作をスタイルで設定できます。このタイプのソリューションを実装するには、Behaviors SDK 拡張機能を追加する必要があります ([参照の追加] > [ユニバーサル Windows] > [拡張機能] に移動します)。動作の定義 (例) :

public class HoverBehavior : DependencyObject, Microsoft.Xaml.Interactivity.IBehavior
{
    private Panel _associatedObject;
    private Brush _baseBrush;

    public Brush HoverBrush
    {
        get { return (Brush)GetValue(HoverBrushProperty); }
        set { SetValue(HoverBrushProperty, value); }
    }

    public static readonly DependencyProperty HoverBrushProperty =
        DependencyProperty.Register("HoverBrush", typeof(Brush), typeof(HoverBehavior), new PropertyMetadata(null));

    public Brush DefaultBrush
    {
        get { return (Brush)GetValue(DefaultBrushProperty); }
        set { SetValue(DefaultBrushProperty, value); }
    }

    public static readonly DependencyProperty DefaultBrushProperty =
        DependencyProperty.Register("DefaultBrush", typeof(Brush), typeof(HoverBehavior), new PropertyMetadata(null));

    public DependencyObject AssociatedObject
    {
        get { return _associatedObject; }
    }

    public void Attach(DependencyObject associatedObject)
    {
        _associatedObject = associatedObject as Panel;
        if (_associatedObject != null)
        {
            _baseBrush = _associatedObject.Background;
            if (_associatedObject != null)
            {
                _associatedObject.PointerEntered += _associatedObject_PointerEntered;
                _associatedObject.PointerExited += _associatedObject_PointerExited;
            }
        }
    }

    private void _associatedObject_PointerExited(object sender, PointerRoutedEventArgs e)
    {
        if (_associatedObject != null)
            _associatedObject.Background = HoverBrush;
    }

    private void _associatedObject_PointerEntered(object sender, PointerRoutedEventArgs e)
    {
        if (_associatedObject != null)
            _associatedObject.Background = DefaultBrush ?? _baseBrush;
    }

    public void Detach()
    {
        _associatedObject.PointerEntered -= _associatedObject_PointerEntered;
        _associatedObject.PointerExited -= _associatedObject_PointerExited;
    }
}

xaml では、Interactivity 名前空間に「using」を追加する必要があります。

<Page xmlns:i="using:Microsoft.Xaml.Interactivity" />

また、新しいスタイル (たとえば SpStyle という名前) を定義できます。

<Style TargetType="StackPanel"
       x:Key="SpStyle">
    <Setter Property="i:Interaction.Behaviors">
        <Setter.Value>
            <i:BehaviorCollection>
                <local:HoverBehavior DefaultBrush="Yellow"
                                     HoverBrush="Green" />
            </i:BehaviorCollection>
        </Setter.Value>
    </Setter>
</Style>

動作の HoverBrush プロパティは、マウス ポインターが StackPanel の上にあるときの StackPanel の色であり、DefaultBrush (設定解除可能) は、マウス ポインターが StackPanel の上にないときの StackPanel の色です。

于 2015-12-19T18:56:17.990 に答える