0


私はカスタムコントロールを作成しようとしています(グリッドから派生した単なるカスタムグリッドです。他にも試したいことがいくつかあるため、グリッドのままにしたいと思います)、私の質問は、なぜストーリーボードがEventTrigger からトリガーしようとしているときに機能しますが、通常のトリガーでは正常に機能します。私のコードは次のとおりです。

<Style TargetType="{x:Type local:GridEx}">
    <Setter Property="Width" Value="100" />
    <Setter Property="Height" Value="100" />

    <Style.Triggers>
        <EventTrigger RoutedEvent="MouseRightButtonDown">
            <BeginStoryboard>
                <Storyboard >
                    <DoubleAnimation Storyboard.TargetProperty="Width" To="300" Duration="0:0:1" FillBehavior="HoldEnd" />
                    <DoubleAnimation Storyboard.TargetProperty="Height" To="300" Duration="0:0:1" FillBehavior="HoldEnd" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
        <Trigger Property="IsMouseOver" Value="True" >
            <!--<Trigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard >
                        <DoubleAnimation Storyboard.TargetProperty="Width" To="300" Duration="0:0:1" FillBehavior="HoldEnd" />
                        <DoubleAnimation Storyboard.TargetProperty="Height" To="300" Duration="0:0:1" FillBehavior="HoldEnd" />
                    </Storyboard>
                </BeginStoryboard>
            </Trigger.EnterActions>
            <Trigger.ExitActions>
                <BeginStoryboard>
                    <Storyboard >
                        <DoubleAnimation Storyboard.TargetProperty="Width" To="100" Duration="0:0:1" FillBehavior="HoldEnd" />
                        <DoubleAnimation Storyboard.TargetProperty="Height" To="100" Duration="0:0:1" FillBehavior="HoldEnd" />
                    </Storyboard>
                </BeginStoryboard>
            </Trigger.ExitActions>-->
            <Setter Property="Effect" Value="{StaticResource LiftEffect}"/>
            <Setter Property="RenderTransform">
                <Setter.Value>
                    <TranslateTransform X="-1" Y="-1" />
                </Setter.Value>
            </Setter>
            <Setter Property="Panel.ZIndex" Value="10" />
        </Trigger>
    </Style.Triggers>
</Style>

ユーザーがマウスの右ボタンを押したままにすると、アイデアは非常に単純です。グリッドのサイズを大きくしたいだけです。トリガー「IsMouseOver」から開始するとアニメーションが機能することはわかっていますが、マウスを押したままにしても何も起こりませんか?
いいえ、コメントの問題ではありません:P

カスタム コントロールはグリッドから派生します。

編集コードが追加されました

System.Windows を使用します。System.Windows.Controls を使用します。

namespace WPFCCLIB
{

    public class GridEx : Grid
    {
        public static readonly RoutedEvent LeftMouseDoubleClickEvent = EventManager.RegisterRoutedEvent("LeftMouseDoubleClick",RoutingStrategy.Bubble,typeof(RoutedEventHandler), typeof(GridEx));

        public event RoutedEventHandler LeftMouseDoubleClick
        {
            add { AddHandler(LeftMouseDoubleClickEvent, value); }
            remove { RemoveHandler(LeftMouseDoubleClickEvent, value); }
        }

        static GridEx()
        {
           DefaultStyleKeyProperty.OverrideMetadata(typeof(GridEx), new FrameworkPropertyMetadata(typeof(GridEx)));
        }

        void RaiseLeftMouseDoubleClickEvent()
        {
            RoutedEventArgs newEventArgs = new     RoutedEventArgs(GridEx.LeftMouseDoubleClickEvent);
            RaiseEvent(newEventArgs);
        }    
    }
}
4

1 に答える 1

0

Xaml:

<Window x:Class="WpfApplication10.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication10"
        Title="MainWindow" Height="325" Width="422" Name="UI">
    <Window.Resources>
        <Style TargetType="{x:Type local:GridEX}">
            <Setter Property="Width" Value="100" />
            <Setter Property="Height" Value="100" />
            <Style.Triggers>
                <EventTrigger RoutedEvent="MouseRightButtonDown">
                    <BeginStoryboard>
                        <Storyboard >
                            <DoubleAnimation Storyboard.TargetProperty="Width" To="300" Duration="0:0:1" FillBehavior="HoldEnd" />
                            <DoubleAnimation Storyboard.TargetProperty="Height" To="300" Duration="0:0:1" FillBehavior="HoldEnd" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>

    <local:GridEX Background="Blue" />

</Window>

コード:

namespace WpfApplication10
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }

    public class GridEX : Grid
    {
        public static readonly RoutedEvent LeftMouseDoubleClickEvent = EventManager.RegisterRoutedEvent("LeftMouseDoubleClick", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(GridEX));

        public event RoutedEventHandler LeftMouseDoubleClick
        {
            add { AddHandler(LeftMouseDoubleClickEvent, value); }
            remove { RemoveHandler(LeftMouseDoubleClickEvent, value); }
        }

        static GridEX()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(GridEX), new FrameworkPropertyMetadata(typeof(GridEX)));
        }

        void RaiseLeftMouseDoubleClickEvent()
        {
            RoutedEventArgs newEventArgs = new RoutedEventArgs(GridEX.LeftMouseDoubleClickEvent);
            RaiseEvent(newEventArgs);
        }
    }
}
于 2013-04-12T03:36:34.017 に答える