Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Framework / MS / Internal / Ink / XamlClipboardData.cs / 1 / XamlClipboardData.cs
//----------------------------------------------------------------------------
//
// File: XamlClipboardData.cs
//
// Description:
// A base class which can copy an array of UIElement to the IDataObject as Xaml format.
// It also can retrieve the Xaml data from the IDataObject and create a UIElement array.
//
// Features:
//
// History:
// 11/17/2004 waynezen: Created
//
// Copyright (C) 2001 by Microsoft Corporation. All rights reserved.
//
//---------------------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Markup;
using System.Security;
using System.Text;
using System.Diagnostics;
using MS.Internal.PresentationFramework; //security helper
namespace MS.Internal.Ink
{
internal class XamlClipboardData : ElementsClipboardData
{
//-------------------------------------------------------------------------------
//
// Constructors
//
//-------------------------------------------------------------------------------
#region Constructors
// The default constructor
internal XamlClipboardData() { }
// The constructor with UIElement[] as an argument
internal XamlClipboardData(UIElement[] elements) : base (elements)
{
}
// Checks if the data can be pasted.
internal override bool CanPaste(IDataObject dataObject)
{
// Check if we have Xaml data
bool hasXamlData = false;
try
{
hasXamlData = dataObject.GetDataPresent(DataFormats.Xaml, false);
}
catch ( SecurityException )
{
// If we are under the partial trust, the Xaml format will fail when it needs to be registered.
// In this case, we should just disable the Paste Xaml format content.
hasXamlData = false;
}
return hasXamlData;
}
#endregion Constructors
//--------------------------------------------------------------------------------
//
// Protected Methods
//
//-------------------------------------------------------------------------------
#region Protected Methods
// Check if we have data to be copied
protected override bool CanCopy()
{
return Elements != null && Elements.Count != 0;
}
// Convert the elements to the Xaml and copy the Xaml to the IDataObject
///
///
///
///
///
/// Critical: Calls critical method
/// SecurityHelper.ExtractAppDomainPermissionSetMinusSiteOfOrigin
///
/// We call this to ensure that the appdomain permission set is on the clipboard.
/// The Clipboard methods use this information to ensure that apps can not paste data
/// that was copied in low trust to application to a high trust application
///
[SecurityCritical]
protected override void DoCopy(IDataObject dataObject)
{
// Serialize the selected elements and add it to the data object.
StringBuilder xmlData = new StringBuilder();
foreach ( UIElement element in Elements )
{
string xml;
xml = XamlWriter.Save(element);
xmlData.Append(xml);
}
// Set the data object as XML format.
dataObject.SetData(DataFormats.Xaml, xmlData.ToString());
//
// we need to copy the permission set on the clipboard for
// the Clipboard class methods. See security note for details.
//
PermissionSet permSet = SecurityHelper.ExtractAppDomainPermissionSetMinusSiteOfOrigin();
string setString = permSet.ToString();
Debug.Assert(setString.Length > 0);
dataObject.SetData(DataFormats.ApplicationTrust, setString);
}
// Retrieves the Xaml from the IDataObject and instantiate the elements based on the Xaml
protected override void DoPaste(IDataObject dataObject)
{
ElementList = new List();
// Get the XML data from the data object.
string xml = dataObject.GetData(DataFormats.Xaml) as string;
if ( !String.IsNullOrEmpty(xml) )
{
UIElement element = XamlReader.Load(new System.Xml.XmlTextReader(new System.IO.StringReader(xml))) as UIElement;
if (element != null)
{
ElementList.Add(element);
}
}
}
#endregion Protected Methods
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//----------------------------------------------------------------------------
//
// File: XamlClipboardData.cs
//
// Description:
// A base class which can copy an array of UIElement to the IDataObject as Xaml format.
// It also can retrieve the Xaml data from the IDataObject and create a UIElement array.
//
// Features:
//
// History:
// 11/17/2004 waynezen: Created
//
// Copyright (C) 2001 by Microsoft Corporation. All rights reserved.
//
//---------------------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Markup;
using System.Security;
using System.Text;
using System.Diagnostics;
using MS.Internal.PresentationFramework; //security helper
namespace MS.Internal.Ink
{
internal class XamlClipboardData : ElementsClipboardData
{
//-------------------------------------------------------------------------------
//
// Constructors
//
//-------------------------------------------------------------------------------
#region Constructors
// The default constructor
internal XamlClipboardData() { }
// The constructor with UIElement[] as an argument
internal XamlClipboardData(UIElement[] elements) : base (elements)
{
}
// Checks if the data can be pasted.
internal override bool CanPaste(IDataObject dataObject)
{
// Check if we have Xaml data
bool hasXamlData = false;
try
{
hasXamlData = dataObject.GetDataPresent(DataFormats.Xaml, false);
}
catch ( SecurityException )
{
// If we are under the partial trust, the Xaml format will fail when it needs to be registered.
// In this case, we should just disable the Paste Xaml format content.
hasXamlData = false;
}
return hasXamlData;
}
#endregion Constructors
//--------------------------------------------------------------------------------
//
// Protected Methods
//
//-------------------------------------------------------------------------------
#region Protected Methods
// Check if we have data to be copied
protected override bool CanCopy()
{
return Elements != null && Elements.Count != 0;
}
// Convert the elements to the Xaml and copy the Xaml to the IDataObject
///
///
///
///
///
/// Critical: Calls critical method
/// SecurityHelper.ExtractAppDomainPermissionSetMinusSiteOfOrigin
///
/// We call this to ensure that the appdomain permission set is on the clipboard.
/// The Clipboard methods use this information to ensure that apps can not paste data
/// that was copied in low trust to application to a high trust application
///
[SecurityCritical]
protected override void DoCopy(IDataObject dataObject)
{
// Serialize the selected elements and add it to the data object.
StringBuilder xmlData = new StringBuilder();
foreach ( UIElement element in Elements )
{
string xml;
xml = XamlWriter.Save(element);
xmlData.Append(xml);
}
// Set the data object as XML format.
dataObject.SetData(DataFormats.Xaml, xmlData.ToString());
//
// we need to copy the permission set on the clipboard for
// the Clipboard class methods. See security note for details.
//
PermissionSet permSet = SecurityHelper.ExtractAppDomainPermissionSetMinusSiteOfOrigin();
string setString = permSet.ToString();
Debug.Assert(setString.Length > 0);
dataObject.SetData(DataFormats.ApplicationTrust, setString);
}
// Retrieves the Xaml from the IDataObject and instantiate the elements based on the Xaml
protected override void DoPaste(IDataObject dataObject)
{
ElementList = new List();
// Get the XML data from the data object.
string xml = dataObject.GetData(DataFormats.Xaml) as string;
if ( !String.IsNullOrEmpty(xml) )
{
UIElement element = XamlReader.Load(new System.Xml.XmlTextReader(new System.IO.StringReader(xml))) as UIElement;
if (element != null)
{
ElementList.Add(element);
}
}
}
#endregion Protected Methods
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ResolvePPIDRequest.cs
- HtmlInputFile.cs
- XpsSerializationManager.cs
- XmlSchemaSequence.cs
- VisualStyleTypesAndProperties.cs
- NumericUpDown.cs
- TemplateLookupAction.cs
- ValidatorCompatibilityHelper.cs
- NamespaceEmitter.cs
- OracleColumn.cs
- XmlCharCheckingWriter.cs
- Compiler.cs
- WorkflowTimerService.cs
- GridViewPageEventArgs.cs
- DataGridViewComponentPropertyGridSite.cs
- TextFormatter.cs
- EnvironmentPermission.cs
- SmtpFailedRecipientException.cs
- RemotingSurrogateSelector.cs
- ChangeBlockUndoRecord.cs
- RelationshipConstraintValidator.cs
- Assert.cs
- OutOfMemoryException.cs
- ZipIOCentralDirectoryBlock.cs
- MessageBuffer.cs
- CustomCredentialPolicy.cs
- FactoryMaker.cs
- Attributes.cs
- EnumType.cs
- OracleCommand.cs
- BulletDecorator.cs
- ObjectDataSourceView.cs
- CalendarKeyboardHelper.cs
- JulianCalendar.cs
- HostProtectionPermission.cs
- PointAnimationClockResource.cs
- AsyncPostBackErrorEventArgs.cs
- ToolZoneDesigner.cs
- SystemColors.cs
- FusionWrap.cs
- Menu.cs
- TextAdaptor.cs
- StrongNameUtility.cs
- BuildProviderCollection.cs
- ConnectionInterfaceCollection.cs
- PathNode.cs
- Transform3DGroup.cs
- DataMemberFieldConverter.cs
- RadioButton.cs
- ComAwareEventInfo.cs
- ObjectNavigationPropertyMapping.cs
- Variant.cs
- Mappings.cs
- ExpandCollapsePattern.cs
- Animatable.cs
- AutoGeneratedField.cs
- mediapermission.cs
- GridViewCancelEditEventArgs.cs
- Dictionary.cs
- EntityDataSourceChangedEventArgs.cs
- WsdlWriter.cs
- TypeToArgumentTypeConverter.cs
- ColumnHeaderConverter.cs
- TemplatePagerField.cs
- DefaultEventAttribute.cs
- EventProvider.cs
- CodeBinaryOperatorExpression.cs
- httpserverutility.cs
- NavigationProgressEventArgs.cs
- CodeIndexerExpression.cs
- EllipticalNodeOperations.cs
- UidPropertyAttribute.cs
- ComPlusServiceLoader.cs
- StringSource.cs
- XamlUtilities.cs
- XmlIgnoreAttribute.cs
- StubHelpers.cs
- StubHelpers.cs
- DispatcherHookEventArgs.cs
- InkSerializer.cs
- NameObjectCollectionBase.cs
- AdornedElementPlaceholder.cs
- DropSourceBehavior.cs
- TextElementEnumerator.cs
- HtmlTextArea.cs
- EncodingInfo.cs
- RotationValidation.cs
- Stroke2.cs
- SocketStream.cs
- TraceFilter.cs
- ExtensionDataReader.cs
- ActivityStatusChangeEventArgs.cs
- CompilerInfo.cs
- FormClosingEvent.cs
- HtmlHead.cs
- UnsafeNativeMethods.cs
- PhysicalFontFamily.cs
- Attributes.cs
- GridViewRowPresenterBase.cs
- CacheDependency.cs