dotnet/wpf · error · InvalidEnumArgumentException
InvalidEnumArgumentException(nameof(format), (int)format…
Error message
InvalidEnumArgumentException(nameof(format), (int)format, typeof(TextDataFormat))
What it means
Clipboard.ContainsText(TextDataFormat) only accepts text formats (Text, UnicodeText, OemText, Rtf). Any other or undefined TextDataFormat value throws InvalidEnumArgumentException naming the format parameter.
Solutions
- Pass only TextDataFormat.Text, UnicodeText, OemText, or Rtf
- Validate with Enum.IsDefined / DataFormats.IsValidTextDataFormat before calling
- Use the parameterless ContainsText() for default Unicode text
Example fix
// before
Clipboard.ContainsText((TextDataFormat)rawValue); // may throw
// after
var fmt = (TextDataFormat)rawValue;
if (DataFormats.IsValidTextDataFormat(fmt)) { Clipboard.ContainsText(fmt); } Defensive patterns
Strategy: validation
Validate before calling
bool IsValid(TextDataFormat f) => f is TextDataFormat.Text or TextDataFormat.UnicodeText or TextDataFormat.OemText or TextDataFormat.Rtf; if (!IsValid(format)) throw new ArgumentOutOfRangeException(nameof(format));
Type guard
static bool IsTextFormat(TextDataFormat f) => Enum.IsDefined(typeof(TextDataFormat), f) && f is TextDataFormat.Text or TextDataFormat.UnicodeText or TextDataFormat.OemText or TextDataFormat.Rtf;
Try / catch
try { result = Clipboard.ContainsText(format); }
catch (InvalidEnumArgumentException ex) { log.Warn($"Bad TextDataFormat: {format}", ex); result = false; } Prevention
- Only pass literal TextDataFormat members, never raw ints or unvalidated casts
- Centralize clipboard access behind a helper that validates formats
- Remember not every enum member (e.g. Html) is a valid text format for these APIs
When it happens
Trigger: Calling Clipboard.ContainsText with a cast or computed value outside the valid text formats, e.g. (TextDataFormat)7 or TextDataFormat.Html when unsupported by IsValidTextDataFormat.
Common situations: Persisting format enums from config/interop and passing them unchecked; assuming all TextDataFormat members are valid; integer round-trips of enum values.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
- ArgumentOutOfRangeException(routedEvent)
- image.Source
- InvalidEnumArgumentException(nameof(format), (int)format…
- Specified InkCanvasClipboardFormat is not valid.
- SR.ClipboardCopyMode_Disabled
AI-assisted analysis of dotnet/wpf@81131a70a4 (2026-09-14).
Data as JSON: /api/errors/3f45480c27dbbb05.
Report an issue: GitHub.
Appendix: source
Thrown at src/Microsoft.DotNet.Wpf/src/PresentationCore/System/Windows/clipboard.cs:61
public static bool ContainsFileDropList() => ContainsDataInternal(DataFormats.FileDrop);
/// <summary>
/// Return <see langword="true"/> if Clipboard contains the image format. Otherwise, return <see langword="false"/>.
/// </summary>
public static bool ContainsImage() => ContainsDataInternal(DataFormats.Bitmap);
/// <summary>
/// Return <see langword="true"/> if Clipboard contains the text data format which is unicode.
/// Otherwise, return <see langword="false"/>.
/// </summary>
public static bool ContainsText() => ContainsDataInternal(DataFormats.UnicodeText);
/// <summary>
/// Return <see langword="true"/> if Clipboard contains the specified text data format which is unicode.
/// Otherwise, return <see langword="false"/>.
/// </summary>
public static bool ContainsText(TextDataFormat format) => !DataFormats.IsValidTextDataFormat(format)
? throw new InvalidEnumArgumentException(nameof(format), (int)format, typeof(TextDataFormat))
: ContainsDataInternal(DataFormats.ConvertToDataFormats(format));
/// <summary>
/// Permanently renders the contents of the last IDataObject that was set onto the clipboard.
/// </summary>
public static void Flush() => ClipboardCore.Flush().ThrowOnFailure();
/// <summary>
/// Get audio data as Stream from Clipboard.
/// </summary>
public static Stream? GetAudioStream() => GetTypedDataIfAvailable<Stream>(DataFormatNames.WaveAudio);
/// <summary>
/// Get data for the specified data format from Clipboard.
/// </summary>
public static object? GetData(string format)
{
ArgumentException.ThrowIfNullOrEmpty(format);View on GitHub (pinned to 81131a70a4)