Search code examples
c#wpfreactiveui

How to disable the ViewModelViewHost transition


I am using a ViewModelViewHost in my ReactiveUI WPF application to display a view for an arbitrary viewmodel. When changing the viewmodel, the control fades in/out the view as a transition. I would like to disable this animation. I have found a Transition property but it seems this can only be used to change the transition, not disable it.

Is there any way to do this?


Solution

  • You could modify the default template for the TransitioningContentControl by for example setting the Duration properties of all animations to 0:

    <rx:RoutedViewHost
                Router="{Binding Router, Mode=OneTime}"
                HorizontalContentAlignment="Stretch"
                VerticalContentAlignment="Stretch">
        <rx:RoutedViewHost.Style>
            <Style TargetType="rx:TransitioningContentControl">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="rx:TransitioningContentControl">
                            <Grid 
                            x:Name="PART_Container"
                            VerticalAlignment="{TemplateBinding VerticalAlignment}"
                            HorizontalAlignment="{TemplateBinding HorizontalAlignment}">
                                <VisualStateManager.VisualStateGroups>
                                    <VisualStateGroup x:Name="PresentationStates">
    
                                        <VisualState x:Name="Normal">
                                            <Storyboard>
                                                <ObjectAnimationUsingKeyFrames 
                                                BeginTime="00:00:00" 
                                                Storyboard.TargetName="PART_PreviousContentPresentationSite" 
                                                Storyboard.TargetProperty="(UIElement.Visibility)">
                                                    <DiscreteObjectKeyFrame KeyTime="00:00:00">
                                                        <DiscreteObjectKeyFrame.Value>
                                                            <Visibility>Collapsed</Visibility>
                                                        </DiscreteObjectKeyFrame.Value>
                                                    </DiscreteObjectKeyFrame>
                                                </ObjectAnimationUsingKeyFrames>
                                            </Storyboard>
                                        </VisualState>
    
                                        <VisualState x:Name="FadeTransition_OutIn">
                                            <Storyboard>
                                                <DoubleAnimation 
                                                BeginTime="00:00:00" Duration="00:00:00"
                                                Storyboard.TargetName="PART_PreviousContentPresentationSite"
                                                Storyboard.TargetProperty="(UIElement.Opacity)"
                                                From="1" To="0"/>
    
                                                <DoubleAnimation 
                                                BeginTime="00:00:00" Duration="00:00:00"
                                                Storyboard.TargetName="PART_CurrentContentPresentationSite"
                                                Storyboard.TargetProperty="(UIElement.Opacity)"
                                                From="0" To="1"/>
                                            </Storyboard>
                                        </VisualState>
    
                                        <VisualState x:Name="FadeDownTransition_OutIn">
                                            <Storyboard>
                                                <DoubleAnimation 
                                                BeginTime="00:00:00" Duration="00:00:00"
                                                Storyboard.TargetName="PART_CurrentContentPresentationSite" 
                                                Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[1].(TranslateTransform.Y)"
                                                From="-30" To="0"/>
    
                                                <DoubleAnimation 
                                                BeginTime="00:00:00" Duration="00:00:00"
                                                Storyboard.TargetName="PART_PreviousContentPresentationSite" 
                                                Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[1].(TranslateTransform.Y)"
                                                From="0" To="30"/>
    
                                                <DoubleAnimation 
                                                BeginTime="00:00:00" Duration="00:00:00"
                                                Storyboard.TargetName="PART_CurrentContentPresentationSite"
                                                Storyboard.TargetProperty="(UIElement.Opacity)"
                                                From="0" To="1"/>
    
                                                <DoubleAnimation 
                                                BeginTime="00:00:00" Duration="00:00:00"
                                                Storyboard.TargetName="PART_PreviousContentPresentationSite"
                                                Storyboard.TargetProperty="(UIElement.Opacity)"
                                                From="1" To="0"/>
                                            </Storyboard>
                                        </VisualState>
    
                                        <!-- SlideLeftTransition -->
                                        <VisualState x:Name="SlideLeftTransition_In">
                                            <Storyboard>
                                                <DoubleAnimationUsingKeyFrames 
                                                Storyboard.TargetName="PART_CurrentContentPresentationSite"
                                                Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[1].(TranslateTransform.X)">
                                                    <EasingDoubleKeyFrame KeyTime="00:00:00" Value="-90"/>
                                                    <EasingDoubleKeyFrame KeyTime="00:00:00" Value="-90"/>
                                                    <EasingDoubleKeyFrame KeyTime="00:00:00" Value="0">
                                                        <EasingDoubleKeyFrame.EasingFunction>
                                                            <CircleEase EasingMode="EaseOut"/>
                                                        </EasingDoubleKeyFrame.EasingFunction>
                                                    </EasingDoubleKeyFrame>
                                                </DoubleAnimationUsingKeyFrames>
    
                                                <DoubleAnimationUsingKeyFrames 
                                                Storyboard.TargetName="PART_CurrentContentPresentationSite" 
                                                Storyboard.TargetProperty="(UIElement.Opacity)">
                                                    <DiscreteDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
                                                    <DiscreteDoubleKeyFrame KeyTime="00:00:00" Value="1"/>
                                                </DoubleAnimationUsingKeyFrames>
    
                                                <ObjectAnimationUsingKeyFrames 
                                                Storyboard.TargetName="PART_PreviousContentPresentationSite" 
                                                Storyboard.TargetProperty="(UIElement.Visibility)">
                                                    <DiscreteObjectKeyFrame KeyTime="00:00:00">
                                                        <DiscreteObjectKeyFrame.Value>
                                                            <Visibility>Collapsed</Visibility>
                                                        </DiscreteObjectKeyFrame.Value>
                                                    </DiscreteObjectKeyFrame>
                                                </ObjectAnimationUsingKeyFrames>
                                            </Storyboard>
                                        </VisualState>
    
                                        <VisualState x:Name="SlideLeftTransition_Out">
                                            <Storyboard>
                                                <DoubleAnimation 
                                                BeginTime="00:00:00" Duration="00:00:00"
                                                Storyboard.TargetName="PART_PreviousContentPresentationSite" 
                                                Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[1].(TranslateTransform.X)"
                                                From="0" To="-90"/>
    
                                                <ObjectAnimationUsingKeyFrames 
                                                Storyboard.TargetName="PART_CurrentContentPresentationSite" 
                                                Storyboard.TargetProperty="(UIElement.Visibility)">
                                                    <DiscreteObjectKeyFrame KeyTime="00:00:00">
                                                        <DiscreteObjectKeyFrame.Value>
                                                            <Visibility>Collapsed</Visibility>
                                                        </DiscreteObjectKeyFrame.Value>
                                                    </DiscreteObjectKeyFrame>
                                                </ObjectAnimationUsingKeyFrames>
                                            </Storyboard>
                                        </VisualState>
                                    </VisualStateGroup>
                                </VisualStateManager.VisualStateGroups>
    
                                <ContentPresenter 
                                x:Name="PART_PreviousContentPresentationSite"
                                Content="{x:Null}"
                                ContentTemplate="{TemplateBinding ContentTemplate}"
                                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
                                    <ContentPresenter.RenderTransform>
                                        <TransformGroup>
                                            <TransformGroup.Children>
                                                <ScaleTransform ScaleX="1" ScaleY="1" />
                                                <TranslateTransform X="0" Y="0" />
                                            </TransformGroup.Children>
                                        </TransformGroup>
                                    </ContentPresenter.RenderTransform>
                                </ContentPresenter>
    
                                <ContentPresenter
                                x:Name="PART_CurrentContentPresentationSite"
                                Content="{x:Null}"
                                ContentTemplate="{TemplateBinding ContentTemplate}"
                                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
                                    <ContentPresenter.RenderTransform>
                                        <TransformGroup>
                                            <TransformGroup.Children>
                                                <ScaleTransform ScaleX="1" ScaleY="1" />
                                                <TranslateTransform X="0" Y="0" />
                                            </TransformGroup.Children>
                                        </TransformGroup>
                                    </ContentPresenter.RenderTransform>
                                </ContentPresenter>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </rx:RoutedViewHost.Style>
    </rx:RoutedViewHost>