1

WCFを使用してWindows 8アプリを開発しています。そのために、私は自分のコントロールを作成しました。ここで、最初のコントロールから継承する別のコントロールが必要です。それは基本的に可能ですか?

私の試みでは、デフォルトで .cs と .xaml ファイルで構成される VS tempalte を使用して最初のコントロールを作成しました。2 番目のクラスは、最初のクラスを継承した通常の単純なクラスです。しかし、その 2 番目のコントロールが初期化されるとすぐに、「パーサー内部エラー: オブジェクト ライター 'xClassNotDerivedFromElement'. [行: 2 位置: 13]」というエラー メッセージでアプリがクラッシュします。

最初のコントロール .cs:

namespace Reaction
{
    public partial class ReactionGame : UserControl
    {
        public bool finished = false;
        public bool winable = false;

        public ReactionGame()
        {
            this.InitializeComponent();
        }

        public virtual void load()
        {
            // do all games actions (set up timers, etc)
        }

        public virtual void won()
        { 
            // called when the game is won (free grafics, animate win stuff)
        }

        public virtual void lost()
        {
            // called when the game is lost (free grafics, animate loose stuff)
        }
    }
}

最初のコントロール XAML:

<UserControl
    x:Class="Reaction.ReactionGame"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Reaction"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300"
    d:DesignWidth="400">

    <Grid/>
</UserControl>

2 番目のコントロール .cs (のみ):

namespace Reaction.ReactionGames
{
    public class WhiteGame:ReactionGame
    {

        Windows.UI.Xaml.DispatcherTimer timer = null;

        public WhiteGame()
        {
            this.InitializeComponent();
        }

        public override void load()
        {
            Windows.UI.Xaml.DispatcherTimer timer = new DispatcherTimer();
            timer.Tick += timer_Tick;
            timer.Interval = new TimeSpan(00, 0, 5);
            timer.Start(); 
        }

        void timer_Tick(object sender, object e)
        {
            timer.Stop();

            Rectangle rect = new Rectangle();
            rect.Height = 200;
            rect.Width = 200;
            rect.Fill = new SolidColorBrush(Color.FromArgb(255, 105, 203, 44));
            this.Content = rect;

            winable = true;
        }

        public override void won()
        {
            MessageDialog msg = new MessageDialog("Gewonnen!");
            msg.ShowAsync();
        }

        public override void lost()
        {

        }
    }
}
4

0 に答える 0