как предотвратить перезапись myControl.g.cs с неверным базовым классом - PullRequest
1 голос
/ 19 мая 2010

У меня есть два пользовательских курсора для моего приложения, MyCursor и MyOtherCursor, оба из которых были разработаны в xaml, и я добавил некоторое поведение в xaml.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 каждый раз. Кто-нибудь знает, как это предотвратить?

Ответы [ 2 ]

2 голосов
/ 19 мая 2010

Ваш 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 ваш базовый класс - UserControl

1 голос
/ 19 мая 2010

Привет, @ Джонни, для меня все нормально, вот что я сделал, я думаю, ты перепутал пространство имен:

Пространство имен моего проекта: SilverlightApplication2 Внутри этого проекта я создал файл CS с именем CursorBase, унаследовав его от пользовательского элемента управления:

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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...