Telerik Forums
UI for WPF Forum
7 answers
475 views
Hi Telerik
can you help in getting DatePicker working in GridView, in WPF
i have tried this link gridview-how-to-create-date-time-picker-column and Custom Column also none of above work.

then i tried using simple example with Resources and i can get DatePicker in Grid column but i cant see bounded data in it.

it always shows me "Enter Date" but no selected date is visible i have binded Gridview using code behind with DataTable()


Help me please
Boris
Telerik team
 answered on 21 Oct 2014
2 answers
123 views
GOAL: Have the Ribbon start minimized or settable from my VM using state.

The RadRibbonView is bound to a RadRichTextBox. I pretty much used the sample app for the template.

I set the IsMinimized in the template and it crashed.

Then I tried a style.

<Style TargetType="{x:Type telerik:RadRichTextBoxRibbonUI}" BasedOn="{StaticResource {x:Type telerik:RadRichTextBoxRibbonUI}}">
        <Setter Property="IsMinimized" Value="true"/>
    </Style>


Failed.

Here is the crash.

   at System.Windows.Media.Visual.PointToScreen(Point point)
   at Telerik.Windows.Controls.RadRibbonView.SetPositionAndSizeToMinimizedContentPopup()
   at Telerik.Windows.Controls.RadRibbonView.ShowSelectedTab()
   at Telerik.Windows.Controls.RadRibbonView.<OnApplyTemplate>b__19()
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
   at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
   at System.Windows.Threading.Dispatcher.Run()
   at System.Windows.Application.RunDispatcher(Object ignore)
   at System.Windows.Application.RunInternal(Window window)
   at System.Windows.Application.Run(Window window)
   at System.Windows.Application.Run()
   at ProcedureViewerPOC.App.Main() in c:\TeamMate\dev\SeekfordPOCs\ProcedureViewerPOC\ProcedureViewerPOC\obj\Debug\App.g.cs:line 0
   at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()
Brian
Top achievements
Rank 1
 answered on 20 Oct 2014
4 answers
252 views
Hello,

So here's my problem.
I'm building an extended control based of a SemiCircleGauge. That gauge includes 3 ranges that are always visible, but with min and max value set at runtime.
There is also a fourth range that may or may not be visible, property also set at runtime.
I can bind every other value the way I want to, but not the visibility property. For some reason, it always shows regardless of the value I sent it.

Here's all related code :

XAML of the custom control

<telerik:SemicircleNorthScale x:Name="RudderGaugeScale"
    SweepAngle="140"
    StartAngle="200"
    ShowFirstLabel="False"
    ShowLastLabel="False"
    LabelRotationMode="None"
    MiddleTicks="1"
    MajorTickStep="5"
    EndWidth="0.2"
    StartWidth="0.2"
    FontSize="9.333"
    FontWeight="Bold"
    Foreground="White"
    LabelLocation="OverOutside"
    MajorTickLocation="CenterInside"
    MiddleTickStroke="#00000000"
    MinorTickBackground="#00000000"
    MajorTickStroke="White"
    MiddleTickBackground="#00000000"
    MajorTickBackground="White"
    MajorTickUseRangeColor="True"
    MinorTickStroke="#01FFFFFF"
    MajorTickStrokeThickness="1" >
    <telerik:SemicircleNorthScale.Resources>
        <helpers:BindingProxy x:Key="proxy" Data="{Binding ElementName=RudderGauge}" />
    </telerik:SemicircleNorthScale.Resources>
    <telerik:SemicircleNorthScale.Min>           
        <MultiBinding Converter="{StaticResource AngleScaleDisplayConverter}">
            <Binding ElementName="RudderGauge" Path="MinValue" />
            <Binding ElementName="RudderGauge" Path="DeadAngle" />
        </MultiBinding>
    </telerik:SemicircleNorthScale.Min>
    <telerik:SemicircleNorthScale.Max>
        <MultiBinding Converter="{StaticResource AngleScaleDisplayConverter}">
            <Binding ElementName="RudderGauge" Path="MaxValue" />
            <Binding ElementName="RudderGauge" Path="DeadAngle" />
        </MultiBinding>
    </telerik:SemicircleNorthScale.Max>
    <telerik:SemicircleNorthScale.Ranges>
        <telerik:GaugeRange x:Name="DangerZone1" Background="{Binding Path=ColorDanger, ElementName=RudderGauge, Converter={StaticResource ColorConverter}}" Min="{Binding ElementName=RudderGaugeScale, Path=Min}" Max="{Binding ElementName=RudderGauge, Path=DangerMin}" StartWidth="0.8" />
        <telerik:GaugeRange x:Name="DefaultRange" Min="{Binding ElementName=RudderGauge, Path=DangerMin}" Max="{Binding ElementName=RudderGauge, Path=DangerMax}" Background="{Binding ColorDisplay, ElementName=RudderGauge, Converter={StaticResource ColorConverter}}"  StartWidth="0.8" />
        <telerik:GaugeRange x:Name="Sector2" Min="{Binding ElementName=RudderGauge, Path=Sector2Value}" Max="{Binding ElementName=RudderGauge, Path=DangerMax}" Background="{Binding ColorSector2, ElementName=RudderGauge, Converter={StaticResource ColorConverter}}" Visibility="{Binding Path=Data.DisplaySector2, ElementName=RudderGauge, Converter={StaticResource VisibilityConverter} diagnostics:PresentationTraceSources.TraceLevel=High}" StartWidth="0.8" />
        <telerik:GaugeRange x:Name="DangerZone2" Min="{Binding ElementName=RudderGauge, Path=DangerMax}" Max="{Binding ElementName=RudderGaugeScale, Path=Max}" Background="{Binding ColorDanger, ElementName=RudderGauge, Converter={StaticResource ColorConverter}}" StartWidth="0.8" />
    </telerik:SemicircleNorthScale.Ranges>
    <telerik:SemicircleNorthScale.Indicators>
        <telerik:Needle Value="{Binding ElementName=RudderGauge, Path=CurrentValue}"  />
        <telerik:Marker Value="{Binding ElementName=RudderGauge, Path=SetPoint}" Visibility="{Binding ElementName=RudderGauge, Path=DisplaySetPoint, Converter={StaticResource VisibilityConverter}}"  />
    </telerik:SemicircleNorthScale.Indicators>
</telerik:SemicircleNorthScale>

Code behind of the dependency property
public static DependencyProperty DisplaySector2Property = DependencyProperty.Register("DisplaySector2",
    typeof(bool),
    typeof(ECARudderGauge),
    new PropertyMetadata(DisplaySector2PropertyChanged));
 
public bool DisplaySector2
{
    get { return (bool)GetValue(DisplaySector2Property); }
    set { SetValue(DisplaySector2Property, value); }
}
 
private static void DisplaySector2PropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
    ((ECARudderGauge)o).OnDisplaySector2PropertyChanged((bool)e.NewValue);
}
 
private void OnDisplaySector2PropertyChanged(bool newValue)
{
    DisplaySector2 = newValue;
}

Converter

using System;
using System.Windows;
using System.Windows.Data;
using System.Globalization;
 
namespace ECAControls.Converters
{
    public class VisibilityConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            bool param = (bool)value;
            if (param)
                return Visibility.Visible;
            else
                return Visibility.Collapsed;
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            Visibility state = (Visibility)value;
            if (state == Visibility.Visible)
                return true;
            else
                return false;
        }
    }
}

Call of the custom control

<eca:ECARudderGauge x:Name="test1" Grid.Row="0" Grid.Column="1"
                           MinValue="{Binding Path=Rudder.MinValue}"
                           MaxValue="{Binding Path=Rudder.MaxValue}"
                           Steps="{Binding Path=Rudder.Steps, Mode=TwoWay}"
                           CurrentValue="{Binding Path=Rudder.CurrentValue, Mode=TwoWay}"
                           SetPoint="{Binding Path=Rudder.SetPoint, Mode=TwoWay}"
                           DisplaySetPoint="{Binding Path=Rudder.DisplaySetPoint, Mode=TwoWay}"
                           ValidateMeasure="{Binding Path=Rudder.ValidateMeasure, Mode=TwoWay}"
                           StopValue="{Binding Path=Rudder.StopValue, Mode=TwoWay}"
                           Sector2Value="{Binding Path=Rudder.Sector2Value, Mode=TwoWay}"
                           DangerMin="{Binding Path=Rudder.DangerMin, Mode=TwoWay}"
                           DangerMax="{Binding Path=Rudder.DangerMax, Mode=TwoWay}"
                           DeadAngle="{Binding Path=Rudder.DeadAngle, Mode=TwoWay}"
                           DisplaySector2="{Binding Path=Rudder.DisplaySector2, Mode=TwoWay}"
                           Text1="{Binding Path=Rudder.Text1, Mode=TwoWay}"
                           Text2="{Binding Path=Rudder.Text2, Mode=TwoWay}"
                           ColorDisplay="{Binding Path=Rudder.ColorDisplay, Mode=TwoWay}"
                           ColorValue="{Binding Path=Rudder.ColorValue, Mode=TwoWay}"
                           ColorScale="{Binding Path=Rudder.ColorScale, Mode=TwoWay}"
                           ColorSetPoint="{Binding Path=Rudder.ColorSetPoint, Mode=TwoWay}"
                           ColorStop="{Binding Path=Rudder.ColorStop, Mode=TwoWay}"
                           ColorSector2="{Binding Path=Rudder.ColorSector2, Mode=TwoWay}"
                           ColorDanger="{Binding Path=Rudder.ColorDanger, Mode=TwoWay}"
                           ColorNeedle1="{Binding Path=Rudder.ColorNeedle1, Mode=TwoWay}"
                           ColorNeedle2="{Binding Path=Rudder.ColorNeedle2, Mode=TwoWay}"
                           ForeColorCurrentVal="{Binding Path=Rudder.ForeColorCurrentVal, Mode=TwoWay}"
                           BackColorCurrentVal="{Binding Path=Rudder.BackColorCurrentVal, Mode=TwoWay}"/>

Diag trace of the binding

01.System.Windows.Data Warning: 56 : Created BindingExpression (hash=32089967) for Binding (hash=25935173)
02.System.Windows.Data Warning: 58 :   Path: 'DisplaySector2'
03.System.Windows.Data Warning: 60 : BindingExpression (hash=32089967): Default mode resolved to OneWay
04.System.Windows.Data Warning: 61 : BindingExpression (hash=32089967): Default update trigger resolved to PropertyChanged
05.System.Windows.Data Warning: 62 : BindingExpression (hash=32089967): Attach to Telerik.Windows.Controls.Gauge.GaugeRange.Visibility (hash=11099805)
06.System.Windows.Data Warning: 64 : BindingExpression (hash=32089967): Use Framework mentor <null>
07.System.Windows.Data Warning: 67 : BindingExpression (hash=32089967): Resolving source
08.System.Windows.Data Warning: 69 : BindingExpression (hash=32089967): Framework mentor not found
09.System.Windows.Data Warning: 65 : BindingExpression (hash=32089967): Resolve source deferred
10.System.Windows.Data Warning: 95 : BindingExpression (hash=32089967): Got InheritanceContextChanged event from GaugeRange (hash=11099805)
11.System.Windows.Data Warning: 67 : BindingExpression (hash=32089967): Resolving source
12.System.Windows.Data Warning: 70 : BindingExpression (hash=32089967): Found data context element: <null> (OK)
13.System.Windows.Data Warning: 74 :     Lookup name RudderGauge:  queried SemicircleNorthScale (hash=21772565)
14.System.Windows.Data Warning: 78 : BindingExpression (hash=32089967): Activate with root item ECARudderGauge (hash=61735358)
15.System.Windows.Data Warning: 108 : BindingExpression (hash=32089967):   At level 0 - for ECARudderGauge.DisplaySector2 found accessor DependencyProperty(DisplaySector2)
16.System.Windows.Data Warning: 104 : BindingExpression (hash=32089967): Replace item at level 0 with ECARudderGauge (hash=61735358), using accessor DependencyProperty(DisplaySector2)
17.System.Windows.Data Warning: 101 : BindingExpression (hash=32089967): GetValue at level 0 from ECARudderGauge (hash=61735358) using DependencyProperty(DisplaySector2): 'False'
18.System.Windows.Data Warning: 80 : BindingExpression (hash=32089967): TransferValue - got raw value 'False'
19.System.Windows.Data Warning: 82 : BindingExpression (hash=32089967): TransferValue - user's converter produced 'Collapsed'
20.System.Windows.Data Warning: 89 : BindingExpression (hash=32089967): TransferValue - using final value 'Collapsed'
21.System.Windows.Data Warning: 79 : BindingExpression (hash=32089967): Deactivate
22.System.Windows.Data Warning: 103 : BindingExpression (hash=32089967): Replace item at level 0 with {NullDataItem}
23.System.Windows.Data Warning: 63 : BindingExpression (hash=32089967): Detach

Please feel free to point out my mistake, I must be missing something somewhere. And I'd really like to avoid setting the visibility in code behind
Thank you
Martin Ivanov
Telerik team
 answered on 20 Oct 2014
4 answers
208 views
Dear Telerik-Team,

creating many GridViewDataColumn (about 500) in code behind and
adding them to a RadGridView (using RadGridView.Columns.Add() ) is working in a reasonable amount of time (<1 ms for each column). 
I am also adding AggregateFunctions to each of those columns (GridViewDataColumn.AggregateFunctions.Add()).
The function to create and add the columns is called in the class constructor right after InitializeComponent();
The RadGridView control itself is defined in XAML.

Now to the actual issue :

The problem arises when columns are added or recreated after that. 
Then, adding columns to the gridview is really slow ( > 10 - 50 ms for each column).
I remove all columns using RadGridView.Columns.Clear() prior to adding the new ones.
This issue only comes up when AggregateFunctions were added to the columns before.
And it is not just getting slower - the time it takes to add a column actually increases with each column then.

Do have any idea what the reason for this behaviour might be?

Thanks and Kind Regards!

Dimitrina
Telerik team
 answered on 20 Oct 2014
1 answer
114 views
hi 
i have a grid and i want to avoid scrollbars to the childs when i open the tree. Can you help me?
My child table definitions are:

<telerik:RadGridView.ChildTableDefinitions>
                <telerik:GridViewTableDefinition>

                    <telerik:GridViewTableDefinition.Relation>
                        <telerik:TableRelation IsSelfReference="True">
                            <telerik:TableRelation.FieldNames>
                                <telerik:FieldDescriptorNamePair ParentFieldDescriptorName="DocumentID" ChildFieldDescriptorName="BelongsTo"/>
                            </telerik:TableRelation.FieldNames>
                        </telerik:TableRelation>
                    </telerik:GridViewTableDefinition.Relation>
                    
                    <telerik:GridViewTableDefinition.ChildTableDefinitions>
                        <telerik:GridViewTableDefinition>

                            <telerik:GridViewTableDefinition.Relation>
                                <telerik:TableRelation IsSelfReference="True">
                                    <telerik:TableRelation.FieldNames>
                                        <telerik:FieldDescriptorNamePair ParentFieldDescriptorName="DocumentID" ChildFieldDescriptorName="BelongsTo"/>
                                    </telerik:TableRelation.FieldNames>
                                </telerik:TableRelation>
                            </telerik:GridViewTableDefinition.Relation>

                            <telerik:GridViewTableDefinition>
                                <telerik:GridViewTableDefinition>

                                    <telerik:GridViewTableDefinition.Relation>
                                        <telerik:TableRelation IsSelfReference="True">
                                            <telerik:TableRelation.FieldNames>
                                                <telerik:FieldDescriptorNamePair ParentFieldDescriptorName="DocumentID" ChildFieldDescriptorName="BelongsTo"/>
                                            </telerik:TableRelation.FieldNames>
                                        </telerik:TableRelation>
                                    </telerik:GridViewTableDefinition.Relation>

                                </telerik:GridViewTableDefinition>

                            </telerik:GridViewTableDefinition>

                        </telerik:GridViewTableDefinition>

                    </telerik:GridViewTableDefinition.ChildTableDefinitions>
                    
                </telerik:GridViewTableDefinition>
            </telerik:RadGridView.ChildTableDefinitions>
Boris
Telerik team
 answered on 20 Oct 2014
2 answers
167 views
Hello, 

My scenario is as follow: I have a shape and I want change its background color to do click in a button. This property doesn't change if I click the button. There is some mode to do refresh or update RadDiagram?

Thanks, 

Maite.
Petar Mladenov
Telerik team
 answered on 20 Oct 2014
4 answers
144 views
Hello, 

I have 2 or more shapes in my diagram. When I make big o little all shapes at once, they changes their position and I will have to place all at the previous position. There is somehow to resize this shapes in the same position?

Thanks, 

Maite.
Pavel R. Pavlov
Telerik team
 answered on 20 Oct 2014
3 answers
159 views
Hi,

I would like to know if it's possible to have access to the metadata (ie: Author, etc...) of a pdf document and if so, how???

Thank's
Alain
Deyan
Telerik team
 answered on 20 Oct 2014
3 answers
840 views
Hi,

I'm using this code to show a modal RadWindow:

private void SendCommandExecuted(object parameter)
{
    PopupDeviceView popupDeviceView = new PopupDeviceView();
    PopupDeviceViewModel popupDeviceViewModel = (PopupDeviceViewModel)popupDeviceView.DataContext;
 
    RadWindow radWindow = new RadWindow();
    radWindow.Content = popupDeviceView;
    radWindow.WindowStartupLocation = WindowStartupLocation.CenterOwner;
    radWindow.ResizeMode = ResizeMode.NoResize;
    radWindow.CanClose = false;
    radWindow.CanMove = false;
 
    radWindow.ShowDialog();
}

it opens a RadWindow as modal, in the main window, but when I minimize that main window - my modal RadWindow dissapears, its only available with Alt+Tab windows keys - and only the main window is shown. And the worst - main window's button, that opened my RadWindow - can be hit with Enter key (not with mouse tho).

What should I do to make it trully 'modal'? TIA
George
Telerik team
 answered on 20 Oct 2014
3 answers
172 views
Greetings, Telerik!

In out project we use diagram with all available types of layout.
Almost all layout types works great but radial tree behaves weird and it's unclear how the one can fix it without your help.
Mostly, we have a lot of containers in diagram and when radial tree is applied it looks fine, but when container that was placed above is expanded it is placed above and connected container isn't visible. Attached file can explain it better than thousand words.

In project we agreed to use next TreeLayoutSettings (regarding Radial tree)
StartRadialAngle = 1.0,
EndRadialAngle = 6.5,
RadialFirstLEvelSeparation = 150.0,
RadialSeparation = 150,
KeepComponentsInOneRadialLayout = true,
I believe that OrgTreeRouter means nothing when layout is being done.
Also we're filling collection of Roots for settings according to some rules (mostly the root will be the shape/container with outgoing connections).

Is it possible for radial tree to respect margins and place containers with some margins?

Thanks in advance! 
Martin Ivanov
Telerik team
 answered on 20 Oct 2014
Narrow your results
Selected tags
Tags
GridView
General Discussions
Chart
RichTextBox
Docking
ScheduleView
ChartView
TreeView
Diagram
Map
ComboBox
TreeListView
Window
RibbonView and RibbonWindow
PropertyGrid
DragAndDrop
TabControl
TileView
Carousel
DataForm
PDFViewer
MaskedInput (Numeric, DateTime, Text, Currency)
AutoCompleteBox
DatePicker
Buttons
ListBox
GanttView
PivotGrid
Spreadsheet
Gauges
NumericUpDown
PanelBar
DateTimePicker
DataFilter
Menu
ContextMenu
TimeLine
Calendar
Installer and Visual Studio Extensions
ImageEditor
BusyIndicator
Expander
Slider
TileList
PersistenceFramework
DataPager
Styling
TimeBar
OutlookBar
TransitionControl
FileDialogs
Book
ToolBar
ColorPicker
TimePicker
MultiColumnComboBox
SyntaxEditor
VirtualGrid
Wizard
ExpressionEditor
NavigationView (Hamburger Menu)
WatermarkTextBox
DesktopAlert
BarCode
SpellChecker
DataServiceDataSource
EntityFrameworkDataSource
RadialMenu
ChartView3D
Data Virtualization
BreadCrumb
LayoutControl
ProgressBar
Sparkline
TabbedWindow
ToolTip
CloudUpload
ColorEditor
TreeMap and PivotMap
EntityFrameworkCoreDataSource (.Net Core)
HeatMap
Chat (Conversational UI)
VirtualizingWrapPanel
Calculator
NotifyIcon
TaskBoard
TimeSpanPicker
BulletGraph
Licensing
WebCam
CardView
DataBar
FilePathPicker
PasswordBox
SplashScreen
Callout
Rating
Accessibility
CollectionNavigator
Localization
AutoSuggestBox
Security
VirtualKeyboard
HighlightTextBlock
TouchManager
StepProgressBar
Badge
OfficeNavigationBar
ExpressionParser
CircularProgressBar
SvgImage
PipsPager
SlideView
AI Coding Assistant
+? more
Top users last month
Cynthia
Top achievements
Rank 1
Iron
Toby
Top achievements
Rank 3
Iron
Iron
Iron
Danielle
Top achievements
Rank 1
Iron
Iron
Joel
Top achievements
Rank 3
Bronze
Bronze
Iron
yw
Top achievements
Rank 2
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Cynthia
Top achievements
Rank 1
Iron
Toby
Top achievements
Rank 3
Iron
Iron
Iron
Danielle
Top achievements
Rank 1
Iron
Iron
Joel
Top achievements
Rank 3
Bronze
Bronze
Iron
yw
Top achievements
Rank 2
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?