簡體   English   中英

WPF Xaml中的UserControl定義

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM