2

のマウスオーバーで別の画像を表示する必要がありImageます。
現在、私はこのようにしています

 <Style.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <!-- Hover image -->
                                <Setter Property="Cursor" Value="Hand"/>
                                <Setter Property="Source" Value="C:\Users\Images\Hi.png"/>
                            </Trigger>
 </Style.Triggers>  

正常に動作しています。しかし、別の画像を表示する前に、のtagプロパティを確認する必要があります。 つまり、値が 1 の場合は表示する必要があり、2 の場合は表示する必要があります。これは、画像の処理とイベント によるコードビハインドによって実現できることを知っています。 しかし、私はXAMLでそれをやりたいです。どんな手掛かり?Image
TagHi1.pnghi2.png
MouseEnterMouseLeave

4

2 に答える 2

4

MultiDataTriggerを使用できます。

DataTrigger は関連する DataContext/Binding で動作するため、Image コントロールを使用する必要があります。

    <Style.Triggers> 
       <MultiDataTrigger>
        <MultiDataTrigger.Conditions>
            <Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsMouseOver}" Value="True"/>
            <Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Tag}" Value="1"/>

        </MultiDataTrigger.Conditions>
        <Setter Property="Cursor" Value="Hand"/>
        <Setter Property="Source" Value="C:\Users\Images\Hi1.png"/>
        </MultiDataTrigger>

        <MultiDataTrigger>
        <MultiDataTrigger.Conditions>
            <Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsMouseOver}" Value="True"/>
            <Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Tag}" Value="2"/>

        </MultiDataTrigger.Conditions>
        <Setter Property="Cursor" Value="Hand"/>
        <Setter Property="Source" Value="C:\Users\Images\Hi2.png"/>
        </MultiDataTrigger>
    </Style.Triggers> 
于 2013-01-02T09:20:21.467 に答える
1

MouseOver で画像の色を変更できる UserControl を作成しました。2 つの SolidColorBrush スタイルを使用して色を切り替え、画像を OpacityMask として表示する四角形があります。

これにより、a) 任意の画像を任意の色にすることができ、b) 新しいボタンが必要になるたびにイベント ロジックを書き直す必要がなくなります。

注: ソースは XAML で直接バインドできないため、コードで設定する必要があります。

ImageButton.xaml:

<UserControl x:Class="ImageButton"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Width="Auto"
        Height="Auto" 
        Cursor="Hand">
    <Rectangle x:Name="Border">
        <Rectangle.OpacityMask>
            <ImageBrush/>
        </Rectangle.OpacityMask>
        <Rectangle.Style>
            <Style TargetType="{x:Type Rectangle}">
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="true">
                        <Setter Property="Fill" Value="{DynamicResource ImageHoverBackground}" />
                    </Trigger>
                    <Trigger Property="IsMouseOver" Value="false">
                        <Setter Property="Fill" Value="{DynamicResource ImageBackground}" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Rectangle.Style>
    </Rectangle>
</UserControl>

ImageButton.xaml.cs:

using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

namespace MyNamespace
{
    public partial class ImageButton : UserControl
    {
        public static DependencyProperty SourceProperty = DependencyProperty.Register("Source", typeof(ImageSource), typeof(ImageButton), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnSourceChanged));
        public ImageSource Source
        {
            get
            {
                return (ImageSource)GetValue(SourceProperty);
            }
            set
            {
                SetValue(SourceProperty, value);
            }
        }
        private static void OnSourceChanged(DependencyObject Object, DependencyPropertyChangedEventArgs e)
        {
            ImageButton Button = Object as ImageButton;
            var ImageBrush = Button.Border.OpacityMask as ImageBrush;
            ImageBrush.ImageSource = Button.Source;
        }

        public ImageButton()
        {
            InitializeComponent();
        }
    }
}
于 2016-03-09T02:05:21.560 に答える