我正在使用 Prism,這是.xaml主視窗的一段代碼
<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>
我已將所有區域的名稱分組在一個 EnumUiRegion中,現在,我想重命名 中的一些值UiRegion,但重命名不會影響.xaml! 因此,我必須手動更改它們。所以我嘗試將.xaml代碼更改為這樣的
<ContentControl
prism:RegionManager.RegionName="{x:Static model:UiRegion.CenterRegion}" />
但它給出了一個運行時錯誤InitializeComponent();
“CenterRegion”不是屬性“RegionName”的有效值。
我的問題是:有沒有辦法解決這個問題?如果沒有,在重命名值.xaml時是否有另一種方法來更新代碼?UiRegion
uj5u.com熱心網友回復:
我正在派生 RegionManager 以添加 UiRegion 型別的屬性并將 x:Static 的值傳遞給原始屬性。
最好創建一個標記擴展:
[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}"/>
uj5u.com熱心網友回復:
我沒有使用 Prism,但我會假設 RegionName 屬性是 String 型別。但是您想將 Enum 值分配給字串。x:Static(就像 StaticResource 和 DynamicResource 一樣)不執行型別轉換。要進行轉換,您需要使用 Binding。
我認為如果這樣做,分配將不會出錯:
<ContentControl
prism:RegionManager.RegionName="{Binding Source={x:Static model:UiRegion.CenterRegion}}" />
uj5u.com熱心網友回復:
classes 也可以作業:
代碼:
public static class RegionNames
{
public const string MAIN_REGION = "mainregion";
public const string DETAILS_REGION = "someotherfunnyidentifier";
}
xml:
<ContentControl prism:RegionManager.RegionName="{x:Static constants:RegionNames.MAIN_REGION}" />
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/506306.html
