When I attempt to set the WindowStartupLocation property through a Setter within a ResourceDictionary, I get a XamlParseException:
‘Set property ‘System.Windows.Setter.Property’ threw an exception.’ Line number ‘x’ and line position ‘y’.
The inner exception is an ArgumentNullException:
Value cannot be null. Parameter name: property.
My style within the resource dictionary is:
<Style TargetType="Window" x:Key="WindowStyle">
<Setter Property="SizeToContent" Value="WidthAndHeight" />
<Setter Property="ResizeMode" Value="CanMinimize" />
<Setter Property="WindowStartupLocation" Value="CenterOwner" />
</Style>
The issue is not with the use of the ResourceDictionary, since when I remove the WindowStartupLocation, the other two properties (SizeToContent and ResizeMode) are set as expected on windows which reference the style:
<Window x:Class="WpfApplication1.MyWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Style="{DynamicResource WindowStyle}">
<Window.Resources>
<ResourceDictionary Source="MyResourceDictionary.xaml" />
</Window.Resources>
</Window>
Has anyone encountered this? Is it a bug/limitation of WPF?
P.S. I know that this question is similar to Window Startup Location from resource dictionary, but not enough information was provided in the other question which subsequently remained unsolved.
The problem is that WindowStartupLocation is not a DependencyProperty so you can’t set it in the style setter. Looking in ILSpy the Setter calls
and throws a NullArgumentException.
As WindowStartupLocation is just a CLR property, it can’t be set in this way.
However, you can still use a
ResourceDictionary: