This is a migrated thread and some comments may be shown as answers.

RadPanorama for WPF?

15 Answers 139 Views
General Discussions
This is a migrated thread and some comments may be shown as answers.
Igor
Top achievements
Rank 2
Igor asked on 02 Apr 2012, 08:07 AM
Hello!

I am interesting if there is RadPanorama for WPF?

15 Answers, 1 is accepted

Sort by
0
Rossen Hristov
Telerik team
answered on 02 Apr 2012, 03:55 PM
Hi,

Currently we do not offer this control but we have it in our development plans. We are in the research phase and I cannot be more precise of the time it will be available.

We have added a PITS item for it where you can give your vote for it and affect the priority of Panorama control for WPF/Silverlight.

Greetings,

Ross
the Telerik team
Sharpen your .NET Ninja skills! Attend Q1 webinar week and get a chance to win a license! Book your seat now >>
0
Igor
Top achievements
Rank 2
answered on 02 Apr 2012, 04:28 PM
Thank you! I will vote
0
Alexander
Top achievements
Rank 1
answered on 14 Sep 2017, 06:27 AM
Hi, are there any updates for a panorama control for wpf?
0
Vladimir Stoyanov
Telerik team
answered on 18 Sep 2017, 08:51 AM
Hi Alexander,

Currently we do not have plans to implement a Panorama control for wpf. If you describe what exactly you are trying to achieve, though, we might be able to point you to how you can implement it with existing controls.

I am looking forward to hearing from you.

Regards,
Vladimir Stoyanov
Progress Telerik
Want to extend the target reach of your WPF applications, leveraging iOS, Android, and UWP? Try UI for Xamarin, a suite of polished and feature-rich components for the Xamarin framework, which allow you to write beautiful native mobile apps using a single shared C# codebase.
0
Alexander
Top achievements
Rank 1
answered on 19 Sep 2017, 06:22 AM

Hi Vladimir,

I want to build a starting screen for a application with several input mask, the user should select the mask he wants to work with on the RadPanorama with Metro style. Additionally I want to provide a Login/Logout button in the top right corner and some tiles to share important company announcements. I thought the RadPanorama would be the perfect control for that.

0
Vladimir Stoyanov
Telerik team
answered on 19 Sep 2017, 02:17 PM
Hi Alexander,

Can you please take a look at the RadTransitionControl article in our documentation and see if that control suits your needs. You can also download our WPF Demos and check out the demos with RadTransitionControl. Another control which can help you achieve what you want is the RadTileList. You can read more about it in this article.

I hope you find this helpful. Let me know if I can be of any further assistance.

Regards,
Vladimir Stoyanov
Progress Telerik
Want to extend the target reach of your WPF applications, leveraging iOS, Android, and UWP? Try UI for Xamarin, a suite of polished and feature-rich components for the Xamarin framework, which allow you to write beautiful native mobile apps using a single shared C# codebase.
0
Alexander
Top achievements
Rank 1
answered on 20 Sep 2017, 01:53 PM

Hi Vladimir,

that looks good but I need the possibility to define rows and columns and add the tiles to the cells of that grid layout like in the RadPanorama. I have taken a look on RadTileList but I think it has he same arrangement behavior like the RadTransitionControl.

Do you have any other tips?

0
Kalin
Telerik team
answered on 25 Sep 2017, 12:15 PM
Hello Alexander,

RadTransitionControl allows you to change its content using a customization animation. In other words you could place whatever you want inside of the control (for example UserControl with the desired layout) and once you want to switch the view (change the content) you will observe nice animation.

So could use the TransitionControl in order to have animations and place inside TileList to achieve the desired look.

Hope this helps.

Regards,
Kalin
Progress Telerik
Want to extend the target reach of your WPF applications, leveraging iOS, Android, and UWP? Try UI for Xamarin, a suite of polished and feature-rich components for the Xamarin framework, which allow you to write beautiful native mobile apps using a single shared C# codebase.
0
Alexander
Top achievements
Rank 1
answered on 06 Feb 2018, 02:35 PM

Hi Kalin,

thanks for your answer and sorry for my later reply, the topic is actual again now. I have decided to use RadTileList but I have some problems to achieve the behavior I want for the tiles.

1. I would like to have some kind of title at the bottom of the tile (like you can see here on the 'Underwater photography' tile and when the user hovers the mouse over the tile, the title should expand to like half of the tiles height showing a subtitle.

2. And it would be nice when there would be a zoom effect on the content of the tile when the user hovers over the tile.

Do you have any approach or tip to achieve the desired behavior? Maybe the Tile control supports such a behavior out of the box and I just don't know it?

Thank you very much!

0
Kalin
Telerik team
answered on 08 Feb 2018, 01:58 PM
Hello Alexander,

As for the first question - you could check the First Look example from WPF demos application (you can find it here). Regarding the second - there isn't such a built-in functionality and currently we don't have an example demonstrating the same prepared. However if you have any particular questions during the implementation you can let us know.

Regards,
Kalin
Progress Telerik
Want to extend the target reach of your WPF applications, leveraging iOS, Android, and UWP? Try UI for Xamarin, a suite of polished and feature-rich components for the Xamarin framework, which allow you to write beautiful native mobile apps using a single shared C# codebase.
0
Alexander
Top achievements
Rank 1
answered on 12 Feb 2018, 07:18 AM

Hi Kalin,

thanks for your answer, I have found a solution for my first question, if someone is interested here is the code I have used for it.

<Style x:Key="MainTileStyle" TargetType="{x:Type telerik:Tile}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type telerik:Tile}">
                <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Margin="{TemplateBinding Padding}">
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="SelectionStates">
                            <VisualState x:Name="Unselected"/>
                            <VisualState x:Name="Selected"/>
                        </VisualStateGroup>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualState x:Name="Normal"/>
                            <VisualState x:Name="MouseOver">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="MouseOverVisual">
                                        <DiscreteObjectKeyFrame KeyTime="0">
                                            <DiscreteObjectKeyFrame.Value>
                                                <Visibility>Visible</Visibility>
                                            </DiscreteObjectKeyFrame.Value>
                                        </DiscreteObjectKeyFrame>
                                    </ObjectAnimationUsingKeyFrames>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="wpSubtitle">
                                        <DiscreteObjectKeyFrame KeyTime="0">
                                            <DiscreteObjectKeyFrame.Value>
                                                <Visibility>Visible</Visibility>
                                            </DiscreteObjectKeyFrame.Value>
                                        </DiscreteObjectKeyFrame>
                                    </ObjectAnimationUsingKeyFrames>
                                    <ThicknessAnimationUsingKeyFrames Storyboard.TargetProperty="Margin" Storyboard.TargetName="spTitle">
                                        <SplineThicknessKeyFrame KeyTime="00:00:00" Value="2" />
                                    </ThicknessAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                    <Grid>
                        <Grid>
                            <ContentPresenter x:Name="oldContentPresenter" Content="" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                            <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                            <Border x:Name="SelectedVisual" BorderBrush="#FFFFC92B" BorderThickness="3,4,3,3" Background="Transparent" IsHitTestVisible="False" Opacity="0"/>
                            <Border x:Name="MouseOverVisual" BorderBrush="{Binding Path=Background, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type telerik:Tile}}, Converter={StaticResource borderBrushConverter}}" Opacity="0.4" BorderThickness="2" Background="Transparent" IsHitTestVisible="False" Margin="0" Visibility="Collapsed"/>
 
                            <Image Source="{DynamicResource Img}" Margin="20"/>
 
                            <StackPanel x:Name="spTitle" Orientation="Vertical" VerticalAlignment="Bottom" Height="Auto">
                                <telerik:RadWrapPanel VerticalAlignment="Top">
                                    <telerik:RadWrapPanel.Background>
                                        <SolidColorBrush Color="Black" Opacity="0.5"/>
                                    </telerik:RadWrapPanel.Background>
                                    <TextBlock Text="{DynamicResource Title}" Foreground="White" FontWeight="Bold" FontSize="14"
                                               Margin="5, 10, 5, 10" VerticalAlignment="Stretch"/>
                                </telerik:RadWrapPanel>
                                <telerik:RadWrapPanel x:Name="wpSubtitle" VerticalAlignment="Bottom" Visibility="Collapsed">
                                    <telerik:RadWrapPanel.Background>
                                        <SolidColorBrush Color="Black" Opacity="0.5"/>
                                    </telerik:RadWrapPanel.Background>
                                    <TextBlock Text="{DynamicResource Subtitle}" Margin="5" TextWrapping="WrapWithOverflow" Foreground="White" FontSize="14"/>
                                </telerik:RadWrapPanel>
                            </StackPanel>
                        </Grid>
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Background" Value="#FF555555"/>
    <Setter Property="Foreground" Value="White"/>
    <Setter Property="SnapsToDevicePixels" Value="True"/>
    <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
    <Setter Property="VerticalContentAlignment" Value="Stretch"/>
    <Setter Property="UseLayoutRounding" Value="True"/>
</Style>

 

For my second question I have created a Trigger on that style

<Style.Triggers>
    <Trigger Property="local:FrameworkElementExt.IsPressed" Value="True">
        <Setter Property="RenderTransformOrigin" Value="0.5,0.5"/>
        <Setter Property="RenderTransform">
            <Setter.Value>
                <ScaleTransform ScaleX="0.95" ScaleY="0.95" />
            </Setter.Value>
        </Setter>
    </Trigger>
</Style.Triggers>

 

But the trigger isn't fired when I place the Tile into a RadTileList control like below

<telerik:RadTileList Grid.Column="1" Grid.Row="1" local:FrameworkElementExt.AttachIsPressed="True"
                     Grid.ColumnSpan="{Binding ElementName=stGridMain, Path=ColumnDefinitions.Count, Converter={StaticResource tileListColumnSpanConverter}}"
                     Grid.RowSpan="{Binding ElementName=stGridMain, Path=RowDefinitions.Count, Converter={StaticResource tileListRowSpanConverter}}">
 
    <telerik:Tile x:Name="mtWastemanagement" TileType="Quadruple" Background="#0078ac"
                  local:FrameworkElementExt.AttachIsPressed="True" Style="{DynamicResource MainTileStyle}">
        <telerik:Tile.Resources>
            <ImageSource x:Key="Img">pack://application:,,,/Resources/trash.png</ImageSource>
            <system:String x:Key="Title">Abfallamanagement</system:String>
            <system:String x:Key="Subtitle">Geben Sie Abfall für Linien ein oder überprüfen Sie bereits erstellte Eingaben</system:String>
        </telerik:Tile.Resources>
    </telerik:Tile>
</telerik:RadTileList>

 

When I place it outside the RadTileList, for example in a simple Grid it works without problems, what could be the problem here?

0
Sia
Telerik team
answered on 14 Feb 2018, 09:02 PM
Hello,

You are right that when positioned in TileList, the style trigger does not apply. That is why I would recommend using a control template trigger instead as in the shown project.

Regards,
Sia
Progress Telerik
Want to extend the target reach of your WPF applications, leveraging iOS, Android, and UWP? Try UI for Xamarin, a suite of polished and feature-rich components for the Xamarin framework, which allow you to write beautiful native mobile apps using a single shared C# codebase.
0
Alexander
Top achievements
Rank 1
answered on 15 Feb 2018, 01:25 PM

thanks for your answer, it works grat when the mouse is over. But I need to trigger it when the user presses the left mouse button on the tile. For that I have used a framework element extension.

public class FrameworkElementExt
    {
        public static readonly DependencyProperty IsPressedProperty = DependencyProperty.RegisterAttached("IsPressed", typeof(bool),
                                                                        typeof(FrameworkElementExt), new PropertyMetadata(false));
 
        public static readonly DependencyProperty AttachIsPressedProperty = DependencyProperty.RegisterAttached("AttachIsPressed", typeof(bool),
                                                                            typeof(FrameworkElementExt), new PropertyMetadata(false, PropertyChangedCallback));
 
        public static void PropertyChangedCallback(DependencyObject depObj, DependencyPropertyChangedEventArgs args)
        {
            FrameworkElement element = (FrameworkElement)depObj;
            if (element != null)
            {
                if ((bool)args.NewValue)
                {
                    element.MouseDown += new MouseButtonEventHandler(element_MouseDown);
                    element.MouseUp += new MouseButtonEventHandler(element_MouseUp);
                    element.MouseLeave += new MouseEventHandler(element_MouseLeave);
                }
                else
                {
                    element.MouseDown -= new MouseButtonEventHandler(element_MouseDown);
                    element.MouseUp -= new MouseButtonEventHandler(element_MouseUp);
                    element.MouseLeave -= new MouseEventHandler(element_MouseLeave);
                }
            }
        }
 
        static void element_MouseLeave(object sender, MouseEventArgs e)
        {
            FrameworkElement element = (FrameworkElement)sender;
            if (element != null)
            {
                element.SetValue(IsPressedProperty, false);
            }
        }
 
        static void element_MouseUp(object sender, MouseButtonEventArgs e)
        {
            FrameworkElement element = (FrameworkElement)sender;
            if (element != null)
            {
                element.SetValue(IsPressedProperty, false);
            }
        }
 
        static void element_MouseDown(object sender, MouseButtonEventArgs e)
        {
            FrameworkElement element = (FrameworkElement)sender;
            if (element != null)
            {
                element.SetValue(IsPressedProperty, true);
            }
        }
 
        public static bool GetIsPressed(UIElement element)
        {
            return (bool)element.GetValue(IsPressedProperty);
        }
 
        public static void SetIsPressed(UIElement element, bool val)
        {
            element.SetValue(IsPressedProperty, val);
        }
 
        public static bool GetAttachIsPressed(UIElement element)
        {
            return (bool)element.GetValue(AttachIsPressedProperty);
        }
 
        public static void SetAttachIsPressed(UIElement element, bool val)
        {
            element.SetValue(AttachIsPressedProperty, val);
        }
    }

 

This isn't working, do you have any tips for me?

0
Sia
Telerik team
answered on 16 Feb 2018, 03:44 PM
Hello,

Thank you for the shared code. I have tested it on my end and it works as expected. Please check the attached video and the updated project.

Regards,
Sia
Progress Telerik
Want to extend the target reach of your WPF applications, leveraging iOS, Android, and UWP? Try UI for Xamarin, a suite of polished and feature-rich components for the Xamarin framework, which allow you to write beautiful native mobile apps using a single shared C# codebase.
0
Alexander
Top achievements
Rank 1
answered on 22 Feb 2018, 10:28 AM
Thank you very much, it works perfectly!
Tags
General Discussions
Asked by
Igor
Top achievements
Rank 2
Answers by
Rossen Hristov
Telerik team
Igor
Top achievements
Rank 2
Alexander
Top achievements
Rank 1
Vladimir Stoyanov
Telerik team
Kalin
Telerik team
Sia
Telerik team
Share this question
or