2010-05-18 31 views
1

我的應用程序MyCursor和MyOtherCursor有兩個自定義遊標,它們都是在xaml中設計的,並且我在xaml.cs中添加了一些行爲爲他們每個人。這種行爲對於兩者都是一樣的,所以我讓它們從基類繼承以減少代碼重複。如何防止使用錯誤的基類覆蓋myControl.g.cs

XAML:

<UserControl x:Class="MyProject.MyCursor" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="24" Height="24"> 
    <Ellipse Stroke="Black" StrokeThickness="5" Height="24" Width="24" Fill="White" /> 
</UserControl> 

CS:

public partial class myCursor: CursorBase 
{ 
    public InterchangeCursor() 
    { 
     InitializeComponent(); 
    } 
} 

public class CursorBase : UserControl 
{ 
    public virtual void MoveTo(Point pt) 
    { 
     this.SetValue(Canvas.LeftProperty, pt.X); 
     this.SetValue(Canvas.TopProperty, pt.Y); 
    } 
} 

沒有XAML基類,它是純粹的CS定義。

我的問題是,如果我在xaml中更改MyCursor的某些內容,將重新生成MyCursor.g.cs文件,而不是從CursorBase繼承,g.cs中的部分類繼承自System.Windows.Controls .UserControl。由於xaml.cs文件中分部類的另一面仍繼承CursorBase,因此會發生構建錯誤。我發現每次修復g.cs文件都很煩人。有誰知道如何防止這種情況發生?

+0

它不應該發生......嘗試刪除等植物學生成的文件夾中生成的所有文件都存在並重新構建和看到的。 – Malcolm 2010-05-19 06:01:21

+0

請發佈您的XAML。 – 2010-05-19 06:56:41

+0

@馬爾科姆我試過了,它又發生了。我懷疑我錯過了如何繼承SL中的控制行爲。 – 2010-05-19 07:26:53

回答

2

你的XAML是錯了,它應該是:

<CursorBase x:Class="MyProject.MyCursor" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="24" Height="24"> 
    <Ellipse Stroke="Black" StrokeThickness="5" Height="24" Width="24" Fill="White" /> 
</CursorBase> 

的g.cs文件從XAML產生,並根據您的XAML基類是用戶控件

+0

你需要爲CursorBase指定一個XAML命名空間 – 2010-05-19 07:55:12

+0

謝謝,我懷疑我錯過了這樣的基本想法 – 2010-05-19 12:42:11

1

哎嗨,@Jonny我其工作罰款這裏是我做的,我想你與命名空間混亂:

我的項目命名空間爲:SilverlightApplication2 這裏面的項目,我在名爲CursorBase CS文件創建繼承它形成用戶控制:

public class CursorBase : UserControl 
{ 
    public virtual void MoveTo(Point pt) 
    { 
     this.SetValue(Canvas.LeftProperty, pt.X); 
     this.SetValue(Canvas.TopProperty, pt.Y); 
    } 
} 

然後我創建了兩個用戶控制MyCursor.xaml和MyOtherCursor.xaml

XAML MyOtherCursor的:

<SilverlightApplication2:CursorBase x:Class="SilverlightApplication2.MyOtherCursor" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:SilverlightApplication2="clr-namespace:SilverlightApplication2" mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="400"> 

    <Grid x:Name="LayoutRoot" Background="White"> 

    </Grid> 
</SilverlightApplication2:CursorBase> 

CS MyOtherCursor的:

public partial class MyOtherCursor : CursorBase 
{ 
    public MyOtherCursor() 
    { 
     InitializeComponent(); 
    } 
} 

而且對於相同MyCursor:

XAML MyCursor的:

<SilverlightApplication2:CursorBase x:Class="SilverlightApplication2.MyCursor" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
xmlns:SilverlightApplication2="clr-namespace:SilverlightApplication2" mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="400"> 

    <Grid x:Name="LayoutRoot" Background="White"> 

    </Grid> 
</SilverlightApplication2:CursorBase> 

CS MyCursor的:

public partial class MyCursor : CursorBase 
{ 
    public MyCursor() 
    { 
     InitializeComponent(); 
    } 
} 
+0

感謝您花時間仔細研究它Malcolm,我看到了我的錯誤現在 – 2010-05-19 12:44:21