Telerik Forums
UI for WPF Forum
5 answers
474 views
Hello,
I was wondering if there exists some option to customize the values of the Y axis when using bar series with combined mode stack or some option for stack mode to plot to corresponding points of Y axes. If I understood well when a bar series is in Stack mode the bar ignores the real values but it plots the distance between points in the series, putting all the portions one above another and create an enormous scale for the Y axis. I would like if possible that it takes the real values, cause they are sequential in my example, and make the correct scale with real values.
I will explain my problem, so maybe you can give me an advice, maybe there is some other component or chart option, different series that I can use to solve my problem. I am using MVVM pattern and as I am not verry profound of code behind and would like to solve this problem in MVVM style.
So I have a list of strands and each strand is divided in n zones that have start position, end position and a quality indicator. In base of this quality indicator each zone is colored with the specific color. The values of the start and end position are sequential, so that each point rappresents a single zone and i single colored portion on the stack bar. My idea was to create an collection of QcsStrandData in my viewmodel, and bind this collection to the item source of the bar series in the cartesian chart, setting the categoryBinding = "StrandNo" and ValueBinding = "ZoneEnd", in that way I achieved to have a single bar for each strand divided in the corresponding zones. I  managed to color the zone portions using the point Template and until here everything is perfect. The problem is that in this way the Y axes goes to the stars and not to the maximum value of the last point. I also manage somehow to bypass that, I defined and internal vertical ax inside the bar series and hide it, and used the general Y ax and bind it to a fixed maximum value. But then I noticed another problem that I miss the proportions, cause the portion on the bar is in proportion of distance between 2 points, so for example I have one zone from 4640 to 7920, the next one 7920 to 17115, the next from 17115 to 18215 but the height on the bar of all of this zones is the same and I would need it to be in proportion with the real values.
The structure of the entity is
public class QcsStrandData : BaseObject
    {
        private long stranNo;
        public long StrandNo
        {
            get { return this.stranNo; }
            set { this.stranNo = value; this.OnPropertyChanged("StrandNo"); }
        }
 
        private double zoneEnd;
        public double ZoneEnd
        {
            get { return this.zoneEnd; }
            set { this.zoneEnd = value; this.OnPropertyChanged("ZoneEnd"); }
        }
 
        private double zoneStart;
 
        public double ZoneStart
        {
            get { return zoneStart; }
            set { zoneStart = value; this.OnPropertyChanged("ZoneStart"); }
        }
 
 
        private Brush zoneQuality;
        public Brush ZoneQuality
        {
            get { return this.zoneQuality; }
            set { this.zoneQuality = value; this.OnPropertyChanged("ZoneQuality"); }
        }
 
        private string zoneName;
        public string ZoneName
        {
            get { return zoneName; }
            set { zoneName = value; this.OnPropertyChanged("ZoneName"); }
        }
    }
The part of the viewModel that fills the collection is
public ObservableCollection<QcsStrandData> QcsData
        {
            get { return qcsData; }
            set { qcsData = value; this.OnPropertyChanged("QcsData"); }
        }
 
 
        public ObservableCollection<QcsStrandData> CreateQcsStrandsData()
        {
            ObservableCollection<QcsStrandData> result = new ObservableCollection<QcsStrandData>();
 
            result.Add(new QcsStrandData() { ZoneName = "Tundish", StrandNo = 1, ZoneEnd = 100, ZoneQuality = new SolidColorBrush(Colors.Red) });
            result.Add(new QcsStrandData() { ZoneName = "Mould", StrandNo = 1, ZoneEnd = 680, ZoneQuality = new SolidColorBrush(Colors.Orange) });
            result.Add(new QcsStrandData() { ZoneName = "Zone 1", StrandNo = 1, ZoneEnd = 980, ZoneQuality = new SolidColorBrush(Colors.Lime) });
            result.Add(new QcsStrandData() { ZoneName = "Zone 2", StrandNo = 1, ZoneEnd = 2830, ZoneQuality = new SolidColorBrush(Colors.Lime) });
            result.Add(new QcsStrandData() { ZoneName = "Zone 3", StrandNo = 1, ZoneEnd = 4640, ZoneQuality = new SolidColorBrush(Colors.Lime) });
            result.Add(new QcsStrandData() { ZoneName = "Zone 4", StrandNo = 1, ZoneEnd = 7920, ZoneQuality = new SolidColorBrush(Colors.Lime) });
            result.Add(new QcsStrandData() { ZoneName = "AirCooling", StrandNo = 1, ZoneEnd = 17115, ZoneQuality = new SolidColorBrush(Colors.Orange) });
            result.Add(new QcsStrandData() { ZoneName = "Module1", StrandNo = 1, ZoneEnd = 18215, ZoneQuality = new SolidColorBrush(Colors.Red) });
            result.Add(new QcsStrandData() { ZoneName = "Module2", StrandNo = 1, ZoneEnd = 19315, ZoneQuality = new SolidColorBrush(Colors.Lime) });
            result.Add(new QcsStrandData() { ZoneName = "Module3", StrandNo = 1, ZoneEnd = 20415, ZoneQuality = new SolidColorBrush(Colors.Red) });
            result.Add(new QcsStrandData() { ZoneName = "Module4", StrandNo = 1, ZoneEnd = 21515, ZoneQuality = new SolidColorBrush(Colors.Orange) });
            result.Add(new QcsStrandData() { ZoneName = "Module5", StrandNo = 1, ZoneEnd = 22615, ZoneQuality = new SolidColorBrush(Colors.Red) });
            result.Add(new QcsStrandData() { ZoneName = "Module6", StrandNo = 1, ZoneEnd = 23715, ZoneQuality = new SolidColorBrush(Colors.Red) });
            result.Add(new QcsStrandData() { ZoneName = "Module7", StrandNo = 1, ZoneEnd = 24815, ZoneQuality = new SolidColorBrush(Colors.Lime) });
            result.Add(new QcsStrandData() { ZoneName = "Module8", StrandNo = 1, ZoneEnd = 25915, ZoneQuality = new SolidColorBrush(Colors.OrangeRed) });
            result.Add(new QcsStrandData() { ZoneName = "Module9", StrandNo = 1, ZoneEnd = 27015, ZoneQuality = new SolidColorBrush(Colors.Red) });
            result.Add(new QcsStrandData() { ZoneName = "Tart", StrandNo = 1, ZoneEnd = 37395, ZoneQuality = new SolidColorBrush(Colors.Lime) });
            result.Add(new QcsStrandData() { ZoneName = "Tcm", StrandNo = 1, ZoneEnd = 46500, ZoneQuality = new SolidColorBrush(Colors.Lime) });
 
            result.Add(new QcsStrandData() { ZoneName = "Tundish", StrandNo = 2, ZoneEnd = 100, ZoneQuality = new SolidColorBrush(Colors.Red) });
            result.Add(new QcsStrandData() { ZoneName = "Mould", StrandNo = 2, ZoneEnd = 680, ZoneQuality = new SolidColorBrush(Colors.Orange) });
            result.Add(new QcsStrandData() { ZoneName = "Zone 1", StrandNo = 2, ZoneEnd = 980, ZoneQuality = new SolidColorBrush(Colors.Lime) });
            result.Add(new QcsStrandData() { ZoneName = "Zone 2", StrandNo = 2, ZoneEnd = 2830, ZoneQuality = new SolidColorBrush(Colors.Lime) });
            result.Add(new QcsStrandData() { ZoneName = "Zone 3", StrandNo = 2, ZoneEnd = 4640, ZoneQuality = new SolidColorBrush(Colors.Lime) });
            result.Add(new QcsStrandData() { ZoneName = "Zone 4", StrandNo = 2, ZoneEnd = 7920, ZoneQuality = new SolidColorBrush(Colors.Lime) });
            result.Add(new QcsStrandData() { ZoneName = "AirCooling", StrandNo = 2, ZoneEnd = 17115, ZoneQuality = new SolidColorBrush(Colors.Orange) });
            result.Add(new QcsStrandData() { ZoneName = "Module1", StrandNo = 2, ZoneEnd = 18215, ZoneQuality = new SolidColorBrush(Colors.Red) });
            result.Add(new QcsStrandData() { ZoneName = "Module2", StrandNo = 2, ZoneEnd = 19315, ZoneQuality = new SolidColorBrush(Colors.Lime) });
            result.Add(new QcsStrandData() { ZoneName = "Module3", StrandNo = 2, ZoneEnd = 20415, ZoneQuality = new SolidColorBrush(Colors.Red) });
            result.Add(new QcsStrandData() { ZoneName = "Module4", StrandNo = 2, ZoneEnd = 21515, ZoneQuality = new SolidColorBrush(Colors.Orange) });
            result.Add(new QcsStrandData() { ZoneName = "Module5", StrandNo = 2, ZoneEnd = 22615, ZoneQuality = new SolidColorBrush(Colors.Red) });
            result.Add(new QcsStrandData() { ZoneName = "Module6", StrandNo = 2, ZoneEnd = 23715, ZoneQuality = new SolidColorBrush(Colors.Red) });
            result.Add(new QcsStrandData() { ZoneName = "Module7", StrandNo = 2, ZoneEnd = 24815, ZoneQuality = new SolidColorBrush(Colors.Lime) });
            result.Add(new QcsStrandData() { ZoneName = "Module8", StrandNo = 2, ZoneEnd = 25915, ZoneQuality = new SolidColorBrush(Colors.OrangeRed) });
            result.Add(new QcsStrandData() { ZoneName = "Module9", StrandNo = 2, ZoneEnd = 27015, ZoneQuality = new SolidColorBrush(Colors.Red) });
            result.Add(new QcsStrandData() { ZoneName = "Tart", StrandNo = 2, ZoneEnd = 37395, ZoneQuality = new SolidColorBrush(Colors.Lime) });
            result.Add(new QcsStrandData() { ZoneName = "Tcm", StrandNo = 2, ZoneEnd = 46500, ZoneQuality = new SolidColorBrush(Colors.Lime) });
 
            result.Add(new QcsStrandData() { ZoneName = "Tundish", StrandNo = 3, ZoneEnd = 100, ZoneQuality = new SolidColorBrush(Colors.Red) });
            result.Add(new QcsStrandData() { ZoneName = "Mould", StrandNo = 3, ZoneEnd = 680, ZoneQuality = new SolidColorBrush(Colors.Orange) });
            result.Add(new QcsStrandData() { ZoneName = "Zone 1", StrandNo = 3, ZoneEnd = 980, ZoneQuality = new SolidColorBrush(Colors.Lime) });
            result.Add(new QcsStrandData() { ZoneName = "Zone 2", StrandNo = 3, ZoneEnd = 2830, ZoneQuality = new SolidColorBrush(Colors.Lime) });
            result.Add(new QcsStrandData() { ZoneName = "Zone 3", StrandNo = 3, ZoneEnd = 4640, ZoneQuality = new SolidColorBrush(Colors.Lime) });
            result.Add(new QcsStrandData() { ZoneName = "Zone 4", StrandNo = 3, ZoneEnd = 7920, ZoneQuality = new SolidColorBrush(Colors.Lime) });
            result.Add(new QcsStrandData() { ZoneName = "AirCooling", StrandNo = 3, ZoneEnd = 17115, ZoneQuality = new SolidColorBrush(Colors.Orange) });
            result.Add(new QcsStrandData() { ZoneName = "Module1", StrandNo = 3, ZoneEnd = 18215, ZoneQuality = new SolidColorBrush(Colors.Red) });
            result.Add(new QcsStrandData() { ZoneName = "Module2", StrandNo = 3, ZoneEnd = 19315, ZoneQuality = new SolidColorBrush(Colors.Lime) });
            result.Add(new QcsStrandData() { ZoneName = "Module3", StrandNo = 3, ZoneEnd = 20415, ZoneQuality = new SolidColorBrush(Colors.Red) });
            result.Add(new QcsStrandData() { ZoneName = "Module4", StrandNo = 3, ZoneEnd = 21515, ZoneQuality = new SolidColorBrush(Colors.Orange) });
            result.Add(new QcsStrandData() { ZoneName = "Module5", StrandNo = 3, ZoneEnd = 22615, ZoneQuality = new SolidColorBrush(Colors.Red) });
            result.Add(new QcsStrandData() { ZoneName = "Module6", StrandNo = 3, ZoneEnd = 23715, ZoneQuality = new SolidColorBrush(Colors.Red) });
            result.Add(new QcsStrandData() { ZoneName = "Module7", StrandNo = 3, ZoneEnd = 24815, ZoneQuality = new SolidColorBrush(Colors.Lime) });
            result.Add(new QcsStrandData() { ZoneName = "Module8", StrandNo = 3, ZoneEnd = 25915, ZoneQuality = new SolidColorBrush(Colors.OrangeRed) });
            result.Add(new QcsStrandData() { ZoneName = "Module9", StrandNo = 3, ZoneEnd = 27015, ZoneQuality = new SolidColorBrush(Colors.Red) });
            result.Add(new QcsStrandData() { ZoneName = "Tart", StrandNo = 3, ZoneEnd = 37395, ZoneQuality = new SolidColorBrush(Colors.Lime) });
            result.Add(new QcsStrandData() { ZoneName = "Tcm", StrandNo = 3, ZoneEnd = 46500, ZoneQuality = new SolidColorBrush(Colors.Lime) });
            return result;
        }
and the xaml code for the chart
<telerik:RadCartesianChart x:Name="chart" Margin="5">
                <telerik:RadCartesianChart.Grid>
                    <chartView:CartesianChartGrid MajorLinesVisibility="Y" MajorYLineDashArray="5,5" />
                </telerik:RadCartesianChart.Grid>
                <telerik:RadCartesianChart.VerticalAxis>
                            <chartView:LinearAxis Visibility="Visible" ShowLabels="True" Title="Distance [mm]" Minimum="0" IsInverse="True"/>
                </telerik:RadCartesianChart.VerticalAxis>
                <telerik:RadCartesianChart.HorizontalAxis>
                            <chartView:CategoricalAxis ShowLabels="True" VerticalLocation="Top" Title="Strand" PlotMode="BetweenTicks" GapLength="{Binding StrandGap}"/>
                        </telerik:RadCartesianChart.HorizontalAxis>
                <telerik:RadCartesianChart.Series>
                            <chartView:BarSeries CategoryBinding="StrandNo" ValueBinding="ZoneEnd" ItemsSource="{Binding QcsData}" CombineMode="Stack">
                                <chartView:BarSeries.PointTemplate>
                                    <DataTemplate>
                                        <Border Background="{Binding DataItem.ZoneQuality}" BorderThickness="0,2,0,0"  BorderBrush="Black"/>
                                    </DataTemplate>
                                </chartView:BarSeries.PointTemplate>
                            </chartView:BarSeries>
                        </telerik:RadCartesianChart.Series>
            </telerik:RadCartesianChart>
I also attach 2 jpgs wpfStrandZones with the result that I obtain with the source code above and the strandZones that is the screen of what I would need to have.
Any suggestion would be appreciated.
Thanks


  
Gina
Top achievements
Rank 1
 answered on 13 May 2013
1 answer
43 views
Hi,

i want to open a RadWindow with an AutoCompleteBox on it. When i get back to my user control i want
to read the Searchtext from the AutoCompletexBox! I can't find an example or something helpful.

Thanks
Best Regards
Rene
Yana
Telerik team
 answered on 13 May 2013
2 answers
134 views
I'm finding rather large inconsistencies with MergeField formatting. I am binding my RichTextBox with the DocxDataProvider. On a "save" I am saving the byte[] data to a database. Sometimes the MergeFields formatting saves, other times it does not. I am noticing if there are two MergeFields right next to each other, separated by a space, the MergeField on the right will not have it's formatting saved.

The same holds true if you have a 2 column table, the MergeFields in the left column preserve their formatting, however the ones in the right do not. Though this is not an all the time thing.

Is DocxDataProvider and saving the byte[] data that unreliable? Is there a more reliable way to do things. I've wasted a lot of time playing with this, and it was a great idea to help contain our client's from making mistakes/misspellings in Word.

I'm to the worn-down phase now and will consider taking this away from the DocxDataProvider and the MVVM pattern, if i can get more reliability.
Mihail
Telerik team
 answered on 13 May 2013
2 answers
99 views
Hello,

In the attached image, I want to have splitter bars between Pane Left 1, Pane Left 2, and Pane Left 3, for example.
I understand that the splitters can only be obtained through placing RadPaneGroups in RadSplitContainers.
Is there any way that I can create splitter bars between RadPaneGroups, or place multiple vertical RadSplitContainers in the same 'DockedLeft' initial position?
Dodd
Top achievements
Rank 1
 answered on 13 May 2013
1 answer
92 views
Hello Telerik Team,
Is there any way to hide Match Case Button?
Hiwa
Top achievements
Rank 2
 answered on 12 May 2013
1 answer
67 views
Hi!

How can I change the orientation of the diagram? It's always in landscape mode, but I need it in portrait mode.

Thanks!
Tina Stancheva
Telerik team
 answered on 10 May 2013
1 answer
234 views
I need to pragmatically set the selected tab in the RibbonView - how can that be done?

  Chad
Tina Stancheva
Telerik team
 answered on 10 May 2013
3 answers
156 views
I'm attempting to set the TabStopMode in some way via binding. After attempting several ways of doing this that didn't work I'm now attempting to use a converter.

My GridViewDataColumn definition looks like this.
<telerik:GridViewDataColumn x:Name="RequestedQty" 
     DataMemberBinding="{Binding RequestedQty, StringFormat='n'}" 
     Header="Req Qty" Width="75" TextAlignment="Right" 
     HeaderTextAlignment="Right"  
     TabStopMode="{Binding StepIsReadOnly, 
          Converter={StaticResource BooleanToTabStopModeConverter}}"/>

StepIsReadOnly is a property in the object the row is bound to so it's at the same level as RequestedQty.

The problem is that when i run this i get the following in the Immediate Window.

System.Windows.Data Error: 40 : BindingExpression path error: 'StepIsReadOnly' property not found on 'object' ''BatchFixDataEntryViewModel' (HashCode=24249959)'. BindingExpression:Path=StepIsReadOnly; DataItem='BatchFixDataEntryViewModel' (HashCode=24249959); target element is 'GridViewDataColumn' (HashCode=19523191); target property is 'TabStopMode' (type 'GridViewTabStop')


It looks like the binding for TabStopMode is looking at the overall data context (view model) for the window instead of at the data context for the row.

Thanks,
Dave
Nedyalko Nikolov
Telerik team
 answered on 10 May 2013
1 answer
153 views
Hi,

how do I set the focus on a "DataFormDataField" in the "NewItemTemplate" after clicking on Add new Item?

Thanks
Regards
Rene
Ivan Ivanov
Telerik team
 answered on 10 May 2013
2 answers
83 views
hi,
i have been plotting graph on the basis of data coming live and the data is in bulk. Now the problem am facing is that as the data enters the value on x-axis gets collapsed nothing can be seen unless zoomed. But i want 10 data to be shown at a time and again hide those data when new data comes for plotting. but when graph is maximized i should be able to see all hidden and  data points also. i am attaching u a screenshot of my graph for better understanding.
Petar Kirov
Telerik team
 answered on 10 May 2013
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
Book
FileDialogs
ToolBar
ColorPicker
TimePicker
SyntaxEditor
MultiColumnComboBox
VirtualGrid
Wizard
ExpressionEditor
NavigationView (Hamburger Menu)
DesktopAlert
WatermarkTextBox
BarCode
SpellChecker
DataServiceDataSource
EntityFrameworkDataSource
RadialMenu
ChartView3D
Data Virtualization
BreadCrumb
ProgressBar
Sparkline
LayoutControl
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
Rating
SplashScreen
Accessibility
Callout
CollectionNavigator
Localization
AutoSuggestBox
VirtualKeyboard
HighlightTextBlock
Security
TouchManager
StepProgressBar
Badge
OfficeNavigationBar
ExpressionParser
CircularProgressBar
SvgImage
PipsPager
SlideView
AI Coding Assistant
+? more
Top users last month
Rob
Top achievements
Rank 3
Bronze
Iron
Iron
Sergii
Top achievements
Rank 1
Iron
Iron
Dedalus
Top achievements
Rank 1
Iron
Iron
Lan
Top achievements
Rank 1
Iron
Doug
Top achievements
Rank 1
Want to show your ninja superpower to fellow developers?
Top users last month
Rob
Top achievements
Rank 3
Bronze
Iron
Iron
Sergii
Top achievements
Rank 1
Iron
Iron
Dedalus
Top achievements
Rank 1
Iron
Iron
Lan
Top achievements
Rank 1
Iron
Doug
Top achievements
Rank 1
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?