Telerik Forums
UI for WPF Forum
2 answers
200 views
I have an object with custom properties. The only properties I wish to display in the property grid are those of category "MyCategory". How would I do that programatically?

protected string myproperty;
 
[Category("MyCategory")]
public string MyProperty{ get; set; }

I'm already setting the item and populating the RadPropertyGrid; it's the filtering I'm stuck on.

RadPropertyGrid1.Item = n;
Art Kedzierski
Top achievements
Rank 2
 answered on 17 Jul 2012
1 answer
282 views
Hi,

I am using RadListBox (Binded to ObservableCollection<string>) and when I navigate through the RadListbox using up and down keys, selectedItem changes automatically. How can I disable this behaviour? I only want to change SelectedItem only by pressing Enter Key or by Mouse's LeftClick in MVVM.
George
Telerik team
 answered on 17 Jul 2012
1 answer
348 views
In the chart I'm developing the user needs to be able to exclude or include series at runtime. 

If I have understood the information correctly so far it is not possible to XAML-declare series on this kind of dynamic sources but that it is something you're considering for a future update. I didn't want to do it all using code behind becuase that would mess up my ability to declare templates for each series and its trackball.

So, instead I build a small ChartBehavior that acts as the "glue" between my dynamic data series and the chart. It works as expected except for one detail: A series that gets omitted and then included again always ends up at the bottom of the trackball info popup. I assumed that the order of the items in the trackball popup was based on the physical order of the Chart.Series collection so the the behavior saves the initial order to be able to re-insert an omitted series at its original position but this does not work.

How can I affect the order of the items in the trackball info popup?

internal sealed class DynamicCategoricalSeriesBehavior : ChartBehavior
{
    private class SeriesInfo
    {
        public string SeriesKey { get; private set; }
        public int Index { get; set; }
 
        public SeriesInfo(string seriesKey, int seriesIndex)
        {
            Index = seriesIndex;
            SeriesKey = seriesKey;
        }
    }
    private Dictionary<CategoricalSeries, SeriesInfo> _categoricalSeries;
 
    protected override void OnAttached()
    {
        base.OnAttached();
        Chart.DataContextChanged += chartDataContextChanged;
        listenToDataContextPropertyChanged(Chart.DataContext as INotifyPropertyChanged);
    }
 
    protected override void OnChartTemplateChanged(Canvas oldAdornerContainer, Canvas adornerContainer)
    {
        base.OnChartTemplateChanged(oldAdornerContainer, adornerContainer);
        saveCategoricalSeriesValuePropertyNames();
        transformMetricsForSeries(Chart as RadCartesianChart);
    }
 
    private void saveCategoricalSeriesValuePropertyNames()
    {
        var cartesianChart = Chart as RadCartesianChart;
        if (cartesianChart == null)
            return;
 
        _categoricalSeries = new Dictionary<CategoricalSeries, SeriesInfo>();
        var seriesIndex = 0;
        foreach (var series in cartesianChart.Series)
        {
            var catSeries = series as CategoricalSeries;
            if (catSeries == null)
                continue;
 
            var propertyNameValueBinding = catSeries.ValueBinding as PropertyNameDataPointBinding;
            if (propertyNameValueBinding == null)
                continue;
 
            _categoricalSeries[catSeries] = new SeriesInfo(propertyNameValueBinding.PropertyName, seriesIndex++);
        }
    }
 
    private void chartDataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
    {
        listenToDataContextPropertyChanged(Chart.DataContext as INotifyPropertyChanged);
    }
 
    private void listenToDataContextPropertyChanged(INotifyPropertyChanged vm)
    {
        if (vm == null)
            return;
 
        vm.PropertyChanged += (o, args) =>
        {
            if (args.PropertyName == "DynamicDataSeries")
                transformMetricsForSeries(Chart as RadCartesianChart);
        };
    }
 
    private void transformMetricsForSeries(RadCartesianChart chart)
    {
        if (chart == null)
            return;
 
        var dynamicVM = Chart.DataContext as IDynamicMetricsValueSeriesProvider<double>;
        if (dynamicVM == null)
            return;
 
        var supportedSeries = dynamicVM.DynamicDataSeries.Select(series => series.SeriesKey).ToList();
 
        foreach (var kvp in _categoricalSeries)
        {
            var series = kvp.Key;
            var seriesKey = kvp.Value.SeriesKey;
            if (!supportedSeries.Contains(seriesKey))
            {
                removeSeries(chart, series, seriesKey);
                continue;
            }
            insertSeries(chart, series, seriesKey, dynamicVM);
        }
    }
 
    private void insertSeries(RadCartesianChart chart, CategoricalSeries series, string key, IDynamicMetricsValueSeriesProvider<double> seriesProvider)
    {
        if (series.Visibility != Visibility.Visible)
        {
            series.Visibility = Visibility.Visible;
            var index = _categoricalSeries[series].Index;
            chart.Series.Insert(index, series);
        }
        var dataPoints = seriesProvider.MetricsData.Where(i => i.MetricsId == key).ToList();
        series.ValueBinding = new PropertyNameDataPointBinding("Value");
        series.ItemsSource = dataPoints;
        var stroked = series as CategoricalStrokedSeries;
        if (stroked != null)
            stroked.Stroke = seriesProvider.GetMetricsDataColorBrush(key);
    }
 
    private void removeSeries(RadCartesianChart chart, CategoricalSeries series, string key)
    {
        chart.Series.Remove(series);
        series.Visibility = Visibility.Collapsed;
    }
}


Giuseppe
Telerik team
 answered on 17 Jul 2012
1 answer
65 views
I Have a RadContextMenu in XAML in a RadTreeView that works fine. I dynamically load the tree items, and certain tree items I add a different Context menu, but it always opens the RadContextMenu in xaml. If I remove the xaml RadContextMenu ref, the dynamic ContextMenu loads.

So I guess is there a way to prevent every child from inheriting its parents context menu?

Thanks
Ivo
Telerik team
 answered on 17 Jul 2012
1 answer
403 views
I am using the RadGridView for a data entry screen (using MVVM), the last row is always empty and when the user starts to enter data into it a new row is added to the bottom on the list.  My issue is that once the itemSource is updated focus is taken out of the control and put into no mans land, making smooth data entry impossible.

The attached code is a cut down version of what i am doing and displays the same problem of lossing focus when the itemSource is updated.

XAML File
<Window x:Class="TelerikExample.MainWindow"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<DataTemplate x:Key="dtFirstName">
<TextBox Text="{Binding Path=FirstName, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True}" />
</DataTemplate>
<DataTemplate x:Key="dtSecondName">
<TextBox Text="{Binding Path=SecondName, UpdateSourceTrigger=PropertyChanged, NotifyOnSourceUpdated=True}" />
</DataTemplate>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<telerik:RadGridView Grid.Row="1"
CanUserDeleteRows="False"
CanUserInsertRows="False"
CanUserSortColumns="False"
ShowGroupPanel="False"
AutoGeneratingColumn="RadGridView_AutoGeneratingColumn"
ItemsSource="{Binding Rows}"
RowIndicatorVisibility="Collapsed"
AlternateRowBackground="White"
AlternationCount="2"
Background="AliceBlue"
EditTriggers="None"
HorizontalGridLinesBrush="SlateGray"
SelectionMode="Single"
SelectionUnit="FullRow"
ShowColumnHeaders="True"
IsFilteringAllowed="False"
VerticalGridLinesBrush="Transparent">
</telerik:RadGridView>
</Grid>
</Window>


XMAL Code Behind
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
 
namespace TelerikExample
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private GridViewModel _viewModel;
 
        public MainWindow()
        {
            InitializeComponent();
 
            _viewModel = new GridViewModel();
            this.DataContext = _viewModel;
        }
 
        private void RadGridView_AutoGeneratingColumn(object sender, Telerik.Windows.Controls.GridViewAutoGeneratingColumnEventArgs e)
        {
            if (e.Column.UniqueName == "FirstName")
            {
                e.Column.CellTemplate = (DataTemplate)this.Resources["dtFirstName"];
                e.Column.Header = "Forename";
            }
            else if (e.Column.UniqueName == "SecondName")
            {
                e.Column.CellTemplate = (DataTemplate)this.Resources["dtSecondName"];
                e.Column.Header = "Surname";
            }
            else if (e.Column.UniqueName == "ViewModel")
            {
                e.Column.IsVisible = false;
            }
        }
    }
}

View model file

namespace TelerikExample
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ComponentModel;
    using System.Dynamic;
    using System.Collections.ObjectModel;
 
    public class GridViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        private ObservableCollection<dynamic> _rows;
         
        /// <summary>
        ///
        /// </summary>
        /// <param name="name"></param>
        protected void OnPropertyChanged(string name)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(name));
            }
        }
 
        public GridViewModel()
        {
            _rows = new ObservableCollection<dynamic>();
 
            var row = new ExpandoObject() as IDictionary<string, Object>;
 
            row.Add("FirstName", string.Empty);
            row.Add("SecondName", string.Empty);
            row.Add("ViewModel", this);
 
            ((INotifyPropertyChanged)row).PropertyChanged += new PropertyChangedEventHandler(TelerikExample.PropertyChanged.Row_PropertyChanged);
 
            _rows.Add(row);
        }
 
        public void CheckForNewRow()
        {
 
            IDictionary<string, Object> lastRow = _rows.Last() as IDictionary<string, Object>;
 
            if (((string)lastRow["FirstName"]) != string.Empty || ((string)lastRow["SecondName"]) != string.Empty)
            {
                //Add new row               
                var row = new ExpandoObject() as IDictionary<string, Object>;
 
                row.Add("FirstName", string.Empty);
                row.Add("SecondName", string.Empty);
                row.Add("ViewModel", this);
 
                ((INotifyPropertyChanged)row).PropertyChanged += new PropertyChangedEventHandler(TelerikExample.PropertyChanged.Row_PropertyChanged);
 
                this.Rows.Add(row);
            }
        }
 
        public ObservableCollection<dynamic> Rows
        {
            get
            {
                return _rows;
            }
            set
            {
                if (_rows != value)
                {
                    _rows = value;
                    OnPropertyChanged("Rows");
                }
            }
 
        }
    }
}

Property changed event

namespace TelerikExample
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ComponentModel;
    using System.Dynamic;
 
    public class PropertyChanged
    {
        public static void Row_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            object value;
            ((IDictionary<string, Object>)sender).TryGetValue("ViewModel", out value);
            GridViewModel vm = (GridViewModel)value;
 
            vm.CheckForNewRow();
        }
    }
}

So my question is is there a way in which when the itemSource is updated focus isn't lost from the textbox.
Dimitrina
Telerik team
 answered on 17 Jul 2012
0 answers
113 views

I have the below code attached to a SelectionChanged event in a WPF RichTextBox. The idea is for it to select the sentence the user is currently editing, a la iAWriter. Any ideas why it only selects past the cursor, or occasionally throws a ArgumentNullException? Thanks in advance.

Regex sentence = new Regex(@"(([.?!][^\s])*[^.?!])*[.?!]\s"); 
Regex srtl = new Regex(@"(?:[.?!]\s)(([.?!][^\s])*[^.?!])*", RegexOptions.RightToLeft); 
TextRange all = new TextRange(GetPoint(inp.Document.ContentStart, 0), GetPoint(inp.Document.ContentEnd, 0)); 
TextRange aa = new TextRange(GetPoint(inp.Document.ContentStart, 0), GetPoint(inp.CaretPosition, 0)); 
TextRange ab = new TextRange(GetPoint(inp.CaretPosition, 0), GetPoint(inp.Document.ContentEnd, 0)); 
Match b = srtl.Match(aa.Text); 
Match c = sentence.Match(ab.Text); 
 
TextRange cur = new TextRange(GetPoint(inp.CaretPosition, -b.Index), GetPoint(inp.CaretPosition.GetPositionAtOffset(c.Index + c.Length + b.Length), 0)); 
all
.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Silver); 
cur
.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.White); 
Ja
Top achievements
Rank 1
 asked on 17 Jul 2012
1 answer
246 views
Hi

The idea is this: based on a dataset generated a tree structure but I found the following issues

1 - There is not a unique Key property by item or node... or is the property "Name"?
2 - Using the name property FindName method seems not to work ... so for items already included, this method always returns "Nothing" and the item is again included.

This process is generated immediately to the constructor of the class or window, ie, in the Sub Main exite a method that executes the code...

                    For Each currentRow As DataRow In myDataset.Tables(0).Rows

                        Dim currentItem As New RadTreeViewItem
                        With currentItem
                            .Header = currentRow("ObjectName").ToString.ToUpper.Trim
                            .IsEditable = False
                            .IsEnabled = True
                            .Name = .Header
                        End With

                        Dim myObject As RadTreeViewItem = Me.ObjectTypeTree.FindName(currentRow("ObjectName").ToString.ToUpper.Trim)

                        If myObject Is Nothing Then
                            Me.ObjectTypeTree.Items.Add(currentItem)
                        End If

currentItem  = Nothing
myObject  = Nothing

                    Next

 So how I can solve the case described in items 1 and 2.

In advance, thank you all ....
Tina Stancheva
Telerik team
 answered on 17 Jul 2012
3 answers
264 views

I created a proj based on your class diagram example.  I wanted to extend this example to save and reload the layout from disk.  I called the diagram Save method and this is the Xml returned (I have removed some attributes for clarity).  My question is when I call diagram Load, how do I re-attach the Model objects to the shapes in the diagrams?  From the Xml below I can see a Shapes content contains the class name of the Model (MyProj.ClassViewModel) that represents that shape.  Do I have to iterate all of the Shapes and set their content?  If so how can I get this xml to store a key for the instance of the model a shape it contains.

Thanks Craig.
 
<?xml version="1.0" encoding="utf-8"?>
 <RadDiagram Type="Telerik.Windows.Diagrams.Core.IGraphInternal" Version="2012.1"> 
  <Metadata Id="601d134b-3a2c-4055-9f7f-78d70597b052"  >  
   <
Title><![CDATA[Diagram [4/12/2012 8:44:45 AM]]]></Title>  
   <
Description><![CDATA[]]></Description> 
    <Background>#00FFFFFF</Background>
   </Metadata>   <Shapes QNs="Telerik.Windows.Controls.Diagrams, Version=2012.1.326.40, Culture=neutral, PublicKeyToken=5803cfa389c90ce7;">     <RadDiagramShape Type="Telerik.Windows.Controls.RadDiagramShape" Id="4b632971-9f11-41a8-88b4-67992258e376"  Content="MyProj.ClassViewModel" Geometry="M0,0L60,0 60,40 0,40z" QN="0" />   </Shapes>
   <Connections />
 </RadDiagram>


 

Miro Miroslavov
Telerik team
 answered on 17 Jul 2012
7 answers
189 views
I upgraded to 2012.2.607.40 today and rebuilt my project (which built successfully before the upgrade) and received three instances of the following error:

error MC3064: Only public or internal classes can be used within markup. 'Style' type is not public or internal.

Below is the xaml that caused the errors.

<telerik:GridViewCheckBoxColumn.HeaderCellStyle>       
    <Style TargetType="{x:Type telerik:GridViewHeaderCell}">
        <Style.Setters>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type telerik:GridViewHeaderCell}">
                        <telerik:GridViewHeaderCell FilteringUIVisibility="Collapsed">
                            <StackPanel HorizontalAlignment="Center"
                                        Margin="5" >
                                <ContentPresenter   HorizontalAlignment="Center"
                                                    VerticalAlignment="Center"/>
                     
                                <CheckBox   x:Name="CheckBoxHeaderTemplate"
                                            HorizontalAlignment="Center"
                                            Margin="0,5,0,0"
                                            Checked="CheckBoxHeader_Checked"
                                            Unchecked="CheckBoxHeader_Checked"/>                       
                            </StackPanel>
                        </telerik:GridViewHeaderCell>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style.Setters>
    </Style>
</telerik:GridViewCheckBoxColumn.HeaderCellStyle>  
<telerik:GridViewDataColumn.HeaderCellStyle>
    <Style  TargetType="{x:Type telerik:GridViewHeaderCell}">
            <Style.Setters>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type telerik:GridViewHeaderCell}">
                            <ContentPresenter HorizontalAlignment="Stretch"/>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style.Setters>
        </Style>
</telerik:GridViewDataColumn.HeaderCellStyle>

<telerik:GridViewCheckBoxColumn.CellStyle>
    <Style TargetType="telerik:GridViewCell">
        <Setter Property="HorizontalContentAlignment" Value="Center" />
    </Style>
</telerik:GridViewCheckBoxColumn.CellStyle>

Any help would be greatly appreciated.
Thanks in advance,
Steve












Dimitrina
Telerik team
 answered on 17 Jul 2012
5 answers
172 views
Hi all

Is it possible to have multiple RadTileViewItem with different skins in the same RadTileView?

Note: The application is "submitted" to a large Metro Skin type through the instructions in VB.NET:

         StyleManager.ApplicationTheme = New MetroTheme
         RadSpellChecker.WindowSettings.Theme = StyleManager.ApplicationTheme

In advance, thanks for the help you can give me ...
Zarko
Telerik team
 answered on 17 Jul 2012
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
Bohdan
Top achievements
Rank 3
Iron
Iron
Iron
Rob
Top achievements
Rank 3
Bronze
Bronze
Iron
Elliot
Top achievements
Rank 1
Iron
Iron
Iron
Sunil
Top achievements
Rank 1
Cynthia
Top achievements
Rank 1
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Bohdan
Top achievements
Rank 3
Iron
Iron
Iron
Rob
Top achievements
Rank 3
Bronze
Bronze
Iron
Elliot
Top achievements
Rank 1
Iron
Iron
Iron
Sunil
Top achievements
Rank 1
Cynthia
Top achievements
Rank 1
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?