[英]UserControl Define in Xaml of Wpf
在UserControl標記中,如何聲明名稱空間,類名稱及其繼承的類名稱。 如果我輸入Namespacename.WindowLevelGraphControl
,則在xaml.cs
中顯示錯誤,其中我定義了諸如WindowLevelGraphControl : UserControl
之類的類。 此錯誤是類是不同基類的更多定義。
<UserControl x:Class="WindowLevelGraphControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid Height="0" Width="0">
</Grid>
如果我刪除名稱空間名稱,則在類中顯示錯誤,例如未定義intialcomponent();。
等待您的指導。 謝謝
首先像往常一樣添加一個名為WindowLevelGraphControl的UserControl,它應該在WindowLevelGraphControl.xaml中產生
<UserControl x:Class="WindowLevelGraphNS.WindowLevelGraphControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
和在WindowLevelGraphControl.xaml.cs中
public partial class WindowLevelGraphControl : UserControl
現在在您的本地名稱空間中定義您的基類,即WindowLevelGraphNS ,它繼承了UserControl但還包括您希望對其子級可用的自定義代碼
namespace WindowLevelGraphNS
{
public class BaseClass : UserControl
{
然后,您可以通過編輯xaml文件來指定上面定義的用戶控件繼承此類。
<local:BaseClass x:Class="WindowLevelGraphNS.WindowLevelGraphControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WindowLevelGraphNS"
然后像這樣的后端文件.xaml.cs
public partial class WindowLevelGraphControl: BaseClass
有你的問題。 例如,您創建了一個類
namespace TestNamespace
{
public partial class Test :ModelBase
{
public Test()
{
InitializeComponent();
}
}
}
namespace TemplateLoader.Lib.Base
{
public class ModelBase : DependencyObject, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged(string propertyName)
{
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
您正在嘗試在您的xaml中引用它。
第1步
您必須使用xmlns將xml名稱空間添加到您的xaml。 xmlns應該引用您正在使用的控件的基類。 例如,這里Test類的基類是ModelBase 。
因此,您的xml應該包含ModelBase類的引用。
將此添加到您的xaml中:-
xmlns:modelbase="clr-namespace:TemplateLoader.Lib.Base;assembly=TemplateLoader.Lib"
這是因為類ModelBase被寫為命名空間TemplateLoader.Lib.Base
第2步
既然已經添加了引用,則可以使用名稱空間在xaml中使用Test類。
<modelbase:ModelBase x:Class="TestNamespace.Test"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:modelbase="clr-namespace:TemplateLoader.Lib.Base"
mc:Ignorable="d" >
</modelbase:ModelBase>
如果它不能編譯並說局部類不能有不同的聲明。 然后,您需要重新檢查該行:
x:Class應該是該類的全名。 這是TestNamespace.Test現在,您應該可以編譯代碼了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.