diff --git a/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/Samples/Modules/Samples.Modules.Text/Views/HomeView.xaml b/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/Samples/Modules/Samples.Modules.Text/Views/HomeView.xaml index a8f764f1..05a2cfdf 100644 --- a/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/Samples/Modules/Samples.Modules.Text/Views/HomeView.xaml +++ b/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/Samples/Modules/Samples.Modules.Text/Views/HomeView.xaml @@ -23,12 +23,6 @@ xmlns:extToolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit/extended" Title="Text Controls"> - + diff --git a/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/Samples/Modules/Samples.Modules.Text/Views/HomeView.xaml.cs b/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/Samples/Modules/Samples.Modules.Text/Views/HomeView.xaml.cs index d2145440..ab1a092e 100644 --- a/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/Samples/Modules/Samples.Modules.Text/Views/HomeView.xaml.cs +++ b/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/Samples/Modules/Samples.Modules.Text/Views/HomeView.xaml.cs @@ -16,8 +16,6 @@ Visit http://xceed.com and follow @datagrid on Twitter. **********************************************************************/ -using System; -using System.Collections.Generic; using Microsoft.Practices.Prism.Regions; using Samples.Infrastructure.Controls; @@ -32,45 +30,6 @@ namespace Samples.Modules.Text.Views public HomeView() { InitializeComponent(); - - _textBox.Text = "1;2;"; //is of object ids - _textBox.ItemsSource = new List() - { - new Email() { Id = 1, FirstName = "John", LastName = "Doe", EmailAddress = "john@test.com" }, - new Email() { Id = 2, FirstName = "Jane", LastName = "Doe", EmailAddress = "jane@test.com" }, - }; - } - - public class Email - { - public int Id - { - get; - set; - } - public string FirstName - { - get; - set; - } - public string LastName - { - get; - set; - } - public string EmailAddress - { - get; - set; - } - - public string FullName - { - get - { - return String.Format( "{0}, {1}", LastName, FirstName ); - } - } } } } diff --git a/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Themes/Generic.xaml b/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Themes/Generic.xaml index e324c5ea..5c2b5400 100644 --- a/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Themes/Generic.xaml +++ b/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Themes/Generic.xaml @@ -47,7 +47,6 @@ - diff --git a/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/TokenizedTextBox/Images/delete8.png b/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/TokenizedTextBox/Images/delete8.png deleted file mode 100644 index 153a6c82..00000000 Binary files a/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/TokenizedTextBox/Images/delete8.png and /dev/null differ diff --git a/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/TokenizedTextBox/Implementation/Token.cs b/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/TokenizedTextBox/Implementation/Token.cs deleted file mode 100644 index 2252ec36..00000000 --- a/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/TokenizedTextBox/Implementation/Token.cs +++ /dev/null @@ -1,54 +0,0 @@ -/************************************************************************ - - Extended WPF Toolkit - - Copyright (C) 2010-2012 Xceed Software Inc. - - This program is provided to you under the terms of the Microsoft Reciprocal - License (Ms-RL) as published at http://wpftoolkit.codeplex.com/license - - This program can be provided to you by Xceed Software Inc. under a - proprietary commercial license agreement for use in non-Open Source - projects. The commercial version of Extended WPF Toolkit also includes - priority technical support, commercial updates, and many additional - useful WPF controls if you license Xceed Business Suite for WPF. - - Visit http://xceed.com and follow @datagrid on Twitter. - - **********************************************************************/ -using System; - -namespace Microsoft.Windows.Controls -{ - internal class Token - { - public string Delimiter - { - get; - private set; - } - public object Item - { - get; - set; - } - - private string _tokenKey; - public string TokenKey - { - get - { - return _tokenKey; - } - set - { - _tokenKey = String.Format( "{0}{1}", value, Delimiter ); - } - } - - public Token( string delimiter ) - { - Delimiter = delimiter; - } - } -} diff --git a/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/TokenizedTextBox/Implementation/TokenItem.cs b/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/TokenizedTextBox/Implementation/TokenItem.cs deleted file mode 100644 index 2c8bb020..00000000 --- a/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/TokenizedTextBox/Implementation/TokenItem.cs +++ /dev/null @@ -1,44 +0,0 @@ -/************************************************************************ - - Extended WPF Toolkit - - Copyright (C) 2010-2012 Xceed Software Inc. - - This program is provided to you under the terms of the Microsoft Reciprocal - License (Ms-RL) as published at http://wpftoolkit.codeplex.com/license - - This program can be provided to you by Xceed Software Inc. under a - proprietary commercial license agreement for use in non-Open Source - projects. The commercial version of Extended WPF Toolkit also includes - priority technical support, commercial updates, and many additional - useful WPF controls if you license Xceed Business Suite for WPF. - - Visit http://xceed.com and follow @datagrid on Twitter. - - **********************************************************************/ -using System.Windows; -using System.Windows.Controls; - -namespace Microsoft.Windows.Controls -{ - public class TokenItem : ContentControl - { - static TokenItem() - { - DefaultStyleKeyProperty.OverrideMetadata( typeof( TokenItem ), new FrameworkPropertyMetadata( typeof( TokenItem ) ) ); - } - - public static readonly DependencyProperty TokenKeyProperty = DependencyProperty.Register( "TokenKey", typeof( string ), typeof( TokenItem ), new UIPropertyMetadata( null ) ); - public string TokenKey - { - get - { - return ( string )GetValue( TokenKeyProperty ); - } - set - { - SetValue( TokenKeyProperty, value ); - } - } - } -} diff --git a/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/TokenizedTextBox/Implementation/TokenizedTextBox.cs b/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/TokenizedTextBox/Implementation/TokenizedTextBox.cs deleted file mode 100644 index 2267e42a..00000000 --- a/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/TokenizedTextBox/Implementation/TokenizedTextBox.cs +++ /dev/null @@ -1,392 +0,0 @@ -/************************************************************************ - - Extended WPF Toolkit - - Copyright (C) 2010-2012 Xceed Software Inc. - - This program is provided to you under the terms of the Microsoft Reciprocal - License (Ms-RL) as published at http://wpftoolkit.codeplex.com/license - - This program can be provided to you by Xceed Software Inc. under a - proprietary commercial license agreement for use in non-Open Source - projects. The commercial version of Extended WPF Toolkit also includes - priority technical support, commercial updates, and many additional - useful WPF controls if you license Xceed Business Suite for WPF. - - Visit http://xceed.com and follow @datagrid on Twitter. - - **********************************************************************/ -//Based of the code written by Pavan Podila -//http://blog.pixelingene.com/2010/10/tokenizing-control-convert-text-to-tokens/ -using System; -using System.Linq; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Documents; -using System.Windows.Input; - -namespace Microsoft.Windows.Controls -{ - public class TokenizedTextBox : ItemsControl - { - #region Members - - private System.Windows.Controls.RichTextBox _rtb = null; - private bool _surpressTextChanged = false; - private bool _surpressTextChangedEvent = false; - - #endregion //Members - - #region Properties - - public static readonly DependencyProperty SearchMemberPathProperty = DependencyProperty.Register( "SearchMemberPath", typeof( string ), typeof( TokenizedTextBox ), new UIPropertyMetadata( String.Empty ) ); - public string SearchMemberPath - { - get - { - return ( string )GetValue( SearchMemberPathProperty ); - } - set - { - SetValue( SearchMemberPathProperty, value ); - } - } - - public static readonly DependencyProperty TokenDelimiterProperty = DependencyProperty.Register( "TokenDelimiter", typeof( string ), typeof( TokenizedTextBox ), new UIPropertyMetadata( ";" ) ); - public string TokenDelimiter - { - get - { - return ( string )GetValue( TokenDelimiterProperty ); - } - set - { - SetValue( TokenDelimiterProperty, value ); - } - } - - public static readonly DependencyProperty TokenTemplateProperty = DependencyProperty.Register( "TokenTemplate", typeof( DataTemplate ), typeof( TokenizedTextBox ), new UIPropertyMetadata( null ) ); - public DataTemplate TokenTemplate - { - get - { - return ( DataTemplate )GetValue( TokenTemplateProperty ); - } - set - { - SetValue( TokenTemplateProperty, value ); - } - } - - #region Text - - public static readonly DependencyProperty TextProperty = DependencyProperty.Register( "Text", typeof( string ), typeof( TokenizedTextBox ), new UIPropertyMetadata( null, OnTextChanged ) ); - public string Text - { - get - { - return ( string )GetValue( TextProperty ); - } - set - { - SetValue( TextProperty, value ); - } - } - - private static void OnTextChanged( DependencyObject o, DependencyPropertyChangedEventArgs e ) - { - TokenizedTextBox tokenizedTextBox = o as TokenizedTextBox; - if( tokenizedTextBox != null ) - tokenizedTextBox.OnTextChanged( ( string )e.OldValue, ( string )e.NewValue ); - } - - protected virtual void OnTextChanged( string oldValue, string newValue ) - { - if( _rtb == null || _surpressTextChanged ) - return; - - //TODO: when text changes update tokens - } - - #endregion //Text - - public static readonly DependencyProperty ValueMemberPathProperty = DependencyProperty.Register( "ValueMemberPath", typeof( string ), typeof( TokenizedTextBox ), new UIPropertyMetadata( String.Empty ) ); - public string ValueMemberPath - { - get - { - return ( string )GetValue( ValueMemberPathProperty ); - } - set - { - SetValue( ValueMemberPathProperty, value ); - } - } - - - #endregion //Properties - - #region Constructors - - static TokenizedTextBox() - { - DefaultStyleKeyProperty.OverrideMetadata( typeof( TokenizedTextBox ), new FrameworkPropertyMetadata( typeof( TokenizedTextBox ) ) ); - } - - public TokenizedTextBox() - { - CommandBindings.Add( new CommandBinding( TokenizedTextBoxCommands.Delete, DeleteToken ) ); - } - - #endregion //Constructors - - #region Base Class Overrides - - public override void OnApplyTemplate() - { - base.OnApplyTemplate(); - - if( _rtb != null ) - { - _rtb.TextChanged -= RichTextBox_TextChanged; - _rtb.PreviewKeyDown -= RichTextBox_PreviewKeyDown; - } - _rtb = GetTemplateChild( "PART_ContentHost" ) as System.Windows.Controls.RichTextBox; - if( _rtb != null ) - { - _rtb.TextChanged += RichTextBox_TextChanged; - _rtb.PreviewKeyDown += RichTextBox_PreviewKeyDown; - } - - InitializeTokensFromText(); - } - - #endregion //Base Class Overrides - - #region Event Handlers - - private void RichTextBox_TextChanged( object sender, TextChangedEventArgs e ) - { - if( _surpressTextChangedEvent ) - return; - - var text = _rtb.CaretPosition.GetTextInRun( LogicalDirection.Backward ); - var token = ResolveToken( text ); - if( token != null ) - { - ReplaceTextWithToken( text.Trim(), token ); - } - } - - void RichTextBox_PreviewKeyDown( object sender, KeyEventArgs e ) - { - InlineUIContainer container = null; - - if( e.Key == Key.Back ) - { - container = _rtb.CaretPosition.GetAdjacentElement( LogicalDirection.Backward ) as InlineUIContainer; - } - else if( e.Key == Key.Delete ) - { - //if the selected text is a blank space, I will assume that a token item is selected. - //if a token item is selected, we need to move the caret position to the left of the element so we can grab the InlineUIContainer - if( _rtb.Selection.Text == " " ) - { - TextPointer moveTo = _rtb.CaretPosition.GetNextInsertionPosition( LogicalDirection.Backward ); - _rtb.CaretPosition = moveTo; - } - - //the cursor is to the left of a token item - container = _rtb.CaretPosition.GetAdjacentElement( LogicalDirection.Forward ) as InlineUIContainer; - } - - //if the container is not null that means we have something to delete - if( container != null ) - { - var token = ( container as InlineUIContainer ).Child as TokenItem; - if( token != null ) - { - SetTextInternal( Text.Replace( token.TokenKey, "" ) ); - } - } - } - - #endregion //Event Handlers - - #region Methods - - private void InitializeTokensFromText() - { - if( !String.IsNullOrEmpty( Text ) ) - { - string[] tokenKeys = Text.Split( new string[] { TokenDelimiter }, StringSplitOptions.RemoveEmptyEntries ); - foreach( string tokenKey in tokenKeys ) - { - var para = _rtb.CaretPosition.Paragraph; - var token = new Token( TokenDelimiter ) - { - TokenKey = tokenKey, - Item = ResolveItemByTokenKey( tokenKey ) - }; - para.Inlines.Add( CreateTokenContainer( token ) ); - } - } - } - - private Token ResolveToken( string text ) - { - if( text.EndsWith( TokenDelimiter ) ) - return ResolveTokenBySearchMemberPath( text.Substring( 0, text.Length - 1 ).Trim() ); - - return null; - } - - private Token ResolveTokenBySearchMemberPath( string searchText ) - { - //create a new token and default the settings to the search text - var token = new Token( TokenDelimiter ) - { - TokenKey = searchText, - Item = searchText - }; - - if( ItemsSource != null ) - { - foreach( object item in ItemsSource ) - { - var searchProperty = item.GetType().GetProperty( SearchMemberPath ); - if( searchProperty != null ) - { - var searchValue = searchProperty.GetValue( item, null ); - if( searchText.Equals( searchValue.ToString(), StringComparison.InvariantCultureIgnoreCase ) ) - { - var valueProperty = item.GetType().GetProperty( ValueMemberPath ); - if( valueProperty != null ) - token.TokenKey = valueProperty.GetValue( item, null ).ToString(); - - token.Item = item; - break; - } - } - } - } - - return token; - } - - private object ResolveItemByTokenKey( string tokenKey ) - { - if( ItemsSource != null ) - { - foreach( object item in ItemsSource ) - { - var property = item.GetType().GetProperty( ValueMemberPath ); - if( property != null ) - { - var value = property.GetValue( item, null ); - if( tokenKey.Equals( value.ToString(), StringComparison.InvariantCultureIgnoreCase ) ) - return item; - } - } - } - - return tokenKey; - } - - private void ReplaceTextWithToken( string inputText, Token token ) - { - _surpressTextChangedEvent = true; - - var para = _rtb.CaretPosition.Paragraph; - - var matchedRun = para.Inlines.FirstOrDefault( inline => - { - var run = inline as Run; - return ( run != null && run.Text.EndsWith( inputText ) ); - } ) as Run; - - if( matchedRun != null ) // Found a Run that matched the inputText - { - var tokenContainer = CreateTokenContainer( token ); - para.Inlines.InsertBefore( matchedRun, tokenContainer ); - - // Remove only if the Text in the Run is the same as inputText, else split up - if( matchedRun.Text == inputText ) - { - para.Inlines.Remove( matchedRun ); - } - else // Split up - { - var index = matchedRun.Text.IndexOf( inputText ) + inputText.Length; - var tailEnd = new Run( matchedRun.Text.Substring( index ) ); - para.Inlines.InsertAfter( matchedRun, tailEnd ); - para.Inlines.Remove( matchedRun ); - } - - //now append the Text with the token key - SetTextInternal( Text + token.TokenKey ); - } - - _surpressTextChangedEvent = false; - } - - private InlineUIContainer CreateTokenContainer( Token token ) - { - return new InlineUIContainer( CreateTokenItem( token ) ) - { - BaselineAlignment = BaselineAlignment.Center - }; - } - - private TokenItem CreateTokenItem( Token token ) - { - object item = token.Item; - - var tokenItem = new TokenItem() - { - TokenKey = token.TokenKey, - Content = item, - ContentTemplate = TokenTemplate - }; - - if( TokenTemplate == null ) - { - //if no template was supplied let's try to get a value from the object using the DisplayMemberPath - if( !String.IsNullOrEmpty( DisplayMemberPath ) ) - { - var property = item.GetType().GetProperty( DisplayMemberPath ); - if( property != null ) - { - var value = property.GetValue( item, null ); - if( value != null ) - tokenItem.Content = value; - } - } - } - - return tokenItem; - } - - private void DeleteToken( object sender, ExecutedRoutedEventArgs e ) - { - var para = _rtb.CaretPosition.Paragraph; - - Inline inlineToRemove = para.Inlines.Where( inline => inline is InlineUIContainer && ( ( inline as InlineUIContainer ).Child as TokenItem ).TokenKey.Equals( e.Parameter ) ).FirstOrDefault(); - - if( inlineToRemove != null ) - para.Inlines.Remove( inlineToRemove ); - - //update Text to remove delimited value - SetTextInternal( Text.Replace( e.Parameter.ToString(), "" ) ); - } - - private void SetTextInternal( string text ) - { - _surpressTextChanged = true; - Text = text; - _surpressTextChanged = false; - } - - #endregion //Methods - } -} \ No newline at end of file diff --git a/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/TokenizedTextBox/Implementation/TokenizedTextBoxCommands.cs b/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/TokenizedTextBox/Implementation/TokenizedTextBoxCommands.cs deleted file mode 100644 index 494eac55..00000000 --- a/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/TokenizedTextBox/Implementation/TokenizedTextBoxCommands.cs +++ /dev/null @@ -1,35 +0,0 @@ -/************************************************************************ - - Extended WPF Toolkit - - Copyright (C) 2010-2012 Xceed Software Inc. - - This program is provided to you under the terms of the Microsoft Reciprocal - License (Ms-RL) as published at http://wpftoolkit.codeplex.com/license - - This program can be provided to you by Xceed Software Inc. under a - proprietary commercial license agreement for use in non-Open Source - projects. The commercial version of Extended WPF Toolkit also includes - priority technical support, commercial updates, and many additional - useful WPF controls if you license Xceed Business Suite for WPF. - - Visit http://xceed.com and follow @datagrid on Twitter. - - **********************************************************************/ -using System.Windows.Input; - -namespace Microsoft.Windows.Controls -{ - public static class TokenizedTextBoxCommands - { - private static RoutedCommand _deleteCommand = new RoutedCommand(); - - public static RoutedCommand Delete - { - get - { - return _deleteCommand; - } - } - } -} diff --git a/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/TokenizedTextBox/Themes/Generic.xaml b/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/TokenizedTextBox/Themes/Generic.xaml deleted file mode 100644 index aee352a4..00000000 --- a/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/TokenizedTextBox/Themes/Generic.xaml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj b/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj index ad4a0ecb..b63bfde1 100644 --- a/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj +++ b/Release/v1.6.0/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj @@ -187,10 +187,6 @@ Designer MSBuild:Compile - - Designer - MSBuild:Compile - Designer MSBuild:Compile @@ -327,10 +323,6 @@ - - - - @@ -416,9 +408,6 @@ - - - - - - - - - - \ No newline at end of file diff --git a/Release/v1.6.0/ExtendedWPFToolkitSolution_35/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj b/Release/v1.6.0/ExtendedWPFToolkitSolution_35/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj index 7ba744f8..3791f62a 100644 --- a/Release/v1.6.0/ExtendedWPFToolkitSolution_35/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj +++ b/Release/v1.6.0/ExtendedWPFToolkitSolution_35/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj @@ -209,10 +209,6 @@ MSBuild:Compile Designer - - Designer - MSBuild:Compile - MSBuild:Compile Designer @@ -550,18 +546,6 @@ TimePicker\Implementation\TimePicker.cs - - TokenizedTextBox\Implementation\Token.cs - - - TokenizedTextBox\Implementation\TokenItem.cs - - - TokenizedTextBox\Implementation\TokenizedTextBox.cs - - - TokenizedTextBox\Implementation\TokenizedTextBoxCommands.cs - VisualStates.cs @@ -664,9 +648,6 @@ - - -