I am using Prism, this is a chunk of .xaml
code of the main window
<mah:MetroWindow
x:Class="ProjectName.Views.MainWindow"
xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
xmlns:prism="http://prismlibrary.com/">
<ContentControl
prism:RegionManager.RegionName="CenterRegion" />
</mah:MetroWindow>
I have grouped all regions' names in an Enum UiRegion
, And now, I want to rename some of the values in UiRegion
, but renaming will not affect the strings in .xaml
! Hence, I have to change them manually.. So I've tried to change the .xaml
code to something like this
<ContentControl
prism:RegionManager.RegionName="{x:Static model:UiRegion.CenterRegion}" />
But it gives a runtime error at InitializeComponent();
'CenterRegion' is not a valid value for property 'RegionName'.
My Question is: Is there a way to fix this? and if not, is there another way to update .xaml
code when renaming UiRegion
values?
I was working on deriving the RegionManager to add a property of type UiRegion and pass the value of x:Static it to the original property.
It's better to create a markup extension:
[MarkupExtensionReturnType(typeof(string))]
public class UiRegionExtension : MarkupExtension
{
public UiRegion UiRegion { get; set; }
public UiRegionExtension(UiRegion uiRegion)
{
UiRegion = uiRegion;
}
public UiRegionExtension() { }
public override object ProvideValue(IServiceProvider serviceProvider)
{
return UiRegion.ToString();
}
}
<ContentControl
prism:RegionManager.RegionName="{m_ext:UiRegion CenterRegion}"/>