Hi,
I have a XamDataGrid with many Fields that share different styles.
Now each field needs it's MaxLength set individually.
I tried to achieve that by making an attached dependebcyproperty but I have problems accessing ValueConstraint.MaxLength.
This is what I have so far:
using System.Globalization;using System.Windows;using Infragistics.Windows.DataPresenter;using Infragistics.Windows.Editors;
namespace MyNamespace{ public static class MaxLengthHelper {
public static readonly DependencyProperty MaxLengthProperty = DependencyProperty.RegisterAttached(
"MaxLengthHelper",typeof(string), typeof(MaxLengthHelper), new FrameworkPropertyMetadata(null, MaxLengthChanged));
private static void MaxLengthChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) { Field field = obj as Field; if (field != null) { ValueConstraint vc = new ValueConstraint(); if(e.OldValue != null) vc.MaxLength = (int)e.OldValue;
//Set the field'S MaxLength here } } }}
Hello Jan-Oliver,
Thank you for your post.
I have been looking into it and what I can suggest is to create styles for each value editor. You can take a look at the following forum thread, where the similar functionality was achieved:
http://es.infragistics.com/community/forums/t/31984.aspx
I created short sample application based on your scenario to show you how you can implement the functionality that you are looking for. Basically in the sample I created two styles for XamTextEditor and XamNumericEditor. In the styles I created a setter for the ValueConstraint property and set some constraint. Than by using EditorStyle property of the Field class I applied these styles.
Please let me know if you require any further assistance on the matter.
Hi Zhivko,
my fields share already pretty complex editorstyles but need their maxlength set differently. I think this is not possible with your solution, please correct me if I'm wrong.
Therefore, I'm trying to make an attached property / set the length programatically.
Best
Oliver
Thank you for your feedback.
I have been looking into your post. I am not sure what are your styles. You can create styles that set MaxLength in the FieldSettings.Editorstyle for each Field. By using BasedOn property you can extend your style, so the individual style will inherit all values of the original style that are not explicitly redefined in the new style. I modified my sample application to show you how you can implement this functionality. If my sample application does not cover your expectations, would you please modify it with the functionality that you are using, so I will be able to further investigate it for you.
Would you please try this approach and let me know if you require any further assistance on the
thanks for your effort! Unfortunately my code is very complex, so it would be very hard for me to extract a small and working example.
My problem with your solution is that I'm using my own TextBoxField with it's own TextBoxFieldSettings.
If I include your solution like in my code sample below, the DependencyProperty in my TextBoxFieldSettings does not work anymore (i.e. the ContextMenu does not show up):
<utils:TextBoxField Width="{StaticResource ColumnMediumWidth}"Label="Name" Name="Name"> <utils:TextBoxField.Settings> <utils:TextBoxFieldSettings> <utils:TextBoxFieldSettings.EditorStyle> <Style TargetType="{x:Type igWPF:XamTextEditor}"BasedOn="{StaticResource TextBoxCell}"> <Setter Property="ValueConstraint"> <Setter.Value> <igWPF:ValueConstraint MaxLength="50" /> </Setter.Value> </Setter> </Style> </utils:TextBoxFieldSettings.EditorStyle> </utils:TextBoxFieldSettings> </utils:TextBoxField.Settings> </utils:TextBoxField>
public class TextBoxFieldSettings : FieldSettings { private static readonly DependencyProperty ColorColumnProperty = DependencyProperty.Register("ColorColumn", typeof(string), typeof(TextBoxFieldSettings), new PropertyMetadata(null, ColorColumnChanged)); private static void ColorColumnChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var fieldSettings = (TextBoxFieldSettings)d; if (e.NewValue != null) { var columnColorStyle = GridStyleManager.Instance.Styles["ColumnColorMenuItem"]; var item = new MenuItem() { CommandParameter = (string)e.NewValue, Style = columnColorStyle }; var menu = new ContextMenu(); menu.Items.Add(item); fieldSettings.LabelPresenterStyle = new Style(typeof(LabelPresenter)); fieldSettings.LabelPresenterStyle.Setters.Add(new Setter(LabelPresenter.ContextMenuProperty, menu)); } }
public string ColorColumn { get { return (string)GetValue(ColorColumnProperty); } set { SetValue(ColorColumnProperty, value); } }
public TextBoxFieldSettings() { this.CellHeight = 24; this.EditorStyle = GridStyleManager.Instance.Styles["TextBoxCell"]; this.CellValuePresenterStyle = GridStyleManager.Instance.Styles["CellNormalStyle"]; } }
Here is my TextBoxField (I do have more self-made fields):
public class TextBoxField : CustomField { public TextBoxField() { Settings = new TextBoxFieldSettings { CollapseWhenEmpty = false }; }
protected override void OnPropertyChanged(string propertyName) { if (propertyName == "Name") { if (!string.IsNullOrWhiteSpace(Name)) ((TextBoxFieldSettings)Settings).ColorColumn = Name; }
base.OnPropertyChanged(propertyName); } }
I have been investigating further your issue and I created short sample application in order to be able to show you how you can implement the functionality that you are looking for. Basically in the sample application I crated attached property that set MaxLength property of ValueConstraint in Field.
Please let me know if you need any further assistance on the matter.
Hello,
I am just checking if there is anything else I can do for you.
I have been looking into it. It seems that currently with version 14.1 in order to be able to set MaxLength as you want – individual for each field, you should create style for the editor and set MaxLength property to its Value Constraint.
does this mean, I would have to create a style for each of my columns?
You can find my TextboxField and TextboxFieldSettings above in one of my posts.
Modifying your example to work is quite challenging because my project is very big and complex (e.g. Unity pattern).
I have been investigating your requirement. It seems that currently in order to be able to achieve the functionality that you are looking for with version 14.1 you have to create style for value editor(XamTextEditor, XamNumericEditor ,….).
I am not sure what are your styles and your own TextBoxField and TextBoxFieldSetting that you are using . It will be great if could modify my sample application with styles and functionality that you are using, so I will be able to further investigate your issue.