Beispiel #1
0
        public void When_UsingStateTrigger()
        {
            var control = new Control {
                Name = "control"
            };
            var dispatcher = control.Dispatcher;

            var trigger1 = new CustomStateTrigger(true);
            var trigger2 = new CustomStateTrigger(false);

            var state1 = new VisualState
            {
                Name    = "state1",
                Setters =
                {
                    new Setter(new TargetPropertyPath("control", "Tag"), 1)
                },
                StateTriggers = new List <StateTriggerBase> {
                    trigger1
                }
            };
            var state2 = new VisualState
            {
                Name    = "state2",
                Setters =
                {
                    new Setter(new TargetPropertyPath("control", "Tag"), 2)
                },
                StateTriggers = new List <StateTriggerBase> {
                    trigger2
                }
            };
            var group = new VisualStateGroup();

            group.States.Add(state1);
            group.States.Add(state2);

            VisualStateManager.SetVisualStateGroups(control, new List <VisualStateGroup> {
                group
            });

            trigger1.Set();
            dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessAllIfPresent);
            control.Tag.Should().Be(1);

            trigger2.Set();
            dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessAllIfPresent);
            control.Tag.Should().Be(1);

            trigger1.Unset();
            dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessAllIfPresent);
            control.Tag.Should().Be(2);

            trigger2.Unset();
            dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessAllIfPresent);
            control.Tag.Should().Be(null);
        }
Beispiel #2
0
        public void When_UsingStateTriggerAndStoryboard()
        {
            var control = new Control {
                Name = "control"
            };
            var dispatcher = control.Dispatcher;

            var trigger1 = new CustomStateTrigger(true);
            var trigger2 = new CustomStateTrigger(false);

            var completed1Count = 0;
            var completed2Count = 0;

            var storyboard1 = new Storyboard();

            storyboard1.Completed += (sender, eventArgs) => completed1Count++;
            var storyboard2 = new Storyboard();

            storyboard2.Completed += (sender, eventArgs) => completed2Count++;

            var state1 = new VisualState
            {
                Name          = "state1",
                Storyboard    = storyboard1,
                StateTriggers = new List <StateTriggerBase> {
                    trigger1
                }
            };
            var state2 = new VisualState
            {
                Name          = "state2",
                Storyboard    = storyboard2,
                StateTriggers = new List <StateTriggerBase> {
                    trigger2
                }
            };
            var group = new VisualStateGroup();

            group.States.Add(state1);
            group.States.Add(state2);

            VisualStateManager.SetVisualStateGroups(control, new List <VisualStateGroup> {
                group
            });

            completed1Count.Should().Be(0);
            completed2Count.Should().Be(0);

            dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessAllIfPresent);

            completed1Count = 0;
            completed2Count = 0;

            trigger1.Set();
            dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessAllIfPresent);

            completed1Count.Should().Be(0);
            completed2Count.Should().Be(0);

            trigger2.Set();
            dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessAllIfPresent);

            // Seems weird, but that's normal, it's following documented
            // precedence. "state2" will be set only after "trigger1" will
            // be unset.
            completed1Count.Should().Be(1);
            completed2Count.Should().Be(0);

            trigger1.Unset();
            dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessAllIfPresent);

            completed1Count.Should().Be(1);
            completed2Count.Should().Be(1);

            trigger2.Unset();
            dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessAllIfPresent);

            completed1Count.Should().Be(1);
            completed2Count.Should().Be(1);
        }
        public void When_UsingStateTriggerAndStoryboard()
        {
            var control = new Control {
                Name = "control"
            };
            var dispatcher = control.Dispatcher;

            var trigger1 = new CustomStateTrigger(true);
            var trigger2 = new CustomStateTrigger(false);

            var completed1Count = 0;
            var completed2Count = 0;

            var storyboard1 = new Storyboard();

            storyboard1.Completed += (sender, eventArgs) => completed1Count++;
            var storyboard2 = new Storyboard();

            storyboard2.Completed += (sender, eventArgs) => completed2Count++;

            var state1 = new VisualState
            {
                Name          = "state1",
                Storyboard    = storyboard1,
                StateTriggers = new List <StateTriggerBase> {
                    trigger1
                }
            };
            var state2 = new VisualState
            {
                Name          = "state2",
                Storyboard    = storyboard2,
                StateTriggers = new List <StateTriggerBase> {
                    trigger2
                }
            };
            var group = new VisualStateGroup();

            group.States.Add(state1);
            group.States.Add(state2);

            VisualStateManager.SetVisualStateGroups(control, new List <VisualStateGroup> {
                group
            });

            completed1Count.Should().Be(0);
            completed2Count.Should().Be(0);

            // This is to workaround to the fact that the state is applied as soon as it's injected
            // in the states list, so it will be complete twice (once when added in the collection,
            // second when element is set ... which is not the behavior on Windows but is required for some other tests)
            // This should be removed once the VisualStateGroup (and other tests) have been fixed.
            completed1Count = -1;

            dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessAllIfPresent);

            trigger1.Set();
            dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessAllIfPresent);

            completed1Count.Should().Be(1);
            completed2Count.Should().Be(0);

            trigger2.Set();
            dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessAllIfPresent);

            // Seems weird, but that's normal, it's following documented
            // precedence. "state2" will be set only after "trigger1" will
            // be unset.
            completed1Count.Should().Be(1);
            completed2Count.Should().Be(0);

            trigger1.Unset();
            dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessAllIfPresent);

            completed1Count.Should().Be(1);
            completed2Count.Should().Be(1);

            trigger2.Unset();
            dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessAllIfPresent);

            completed1Count.Should().Be(1);
            completed2Count.Should().Be(1);
        }
Beispiel #4
0
        public void When_UsingStateTriggerAndStoryboard()
        {
            var control = new Control {
                Name = "control"
            };
            var dispatcher = control.Dispatcher;

            var trigger1 = new CustomStateTrigger(true);
            var trigger2 = new CustomStateTrigger(false);

            var completed1Count = 0;
            var completed2Count = 0;

            var storyboard1 = new Storyboard();

            storyboard1.Completed += (sender, eventArgs) => completed1Count++;
            var storyboard2 = new Storyboard();

            storyboard2.Completed += (sender, eventArgs) => completed2Count++;

            var state1 = new VisualState
            {
                Name          = "state1",
                Storyboard    = storyboard1,
                StateTriggers = new List <StateTriggerBase> {
                    trigger1
                }
            };
            var state2 = new VisualState
            {
                Name          = "state2",
                Storyboard    = storyboard2,
                StateTriggers = new List <StateTriggerBase> {
                    trigger2
                }
            };
            var group = new VisualStateGroup();

            group.States.Add(state1);
            group.States.Add(state2);

            VisualStateManager.SetVisualStateGroups(control, new List <VisualStateGroup> {
                group
            });

            completed1Count.Should().Be(0);
            completed2Count.Should().Be(0);

            dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessAllIfPresent);

            completed1Count = 0;
            completed2Count = 0;

            trigger1.Set();
            dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessAllIfPresent);

            completed1Count.Should().Be(0);
            completed2Count.Should().Be(0);

            trigger2.Set();
            dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessAllIfPresent);

            completed1Count.Should().Be(0);
            completed2Count.Should().Be(1);

            trigger2.Unset();
            dispatcher.ProcessEvents(CoreProcessEventsOption.ProcessAllIfPresent);

            completed1Count.Should().Be(1);
            completed2Count.Should().Be(1);
        }