继承自WPF中的用户控件 - 无法访问成员

时间:2016-07-12 09:22:12

标签: c# wpf inheritance

在阅读了有关相同论点的所有先前答案之后,我发布了以下问题。他们都没有工作。

我正在创建一个向导,它由一定数量的幻灯片组成。 每个幻灯片都是一个用户控件,并继承自一个名为" SlideBase"

的基类
<div id='content'>
  Here are some texts.
  A second line.
  <a href='http://google.com'>Click Here!</a>
  Another Line.
  <div class='image-parent'>
    <img src='image.jpg' />
  </div> 
  Another another line.
<div class='image-parent'>
  <img src='secondImage.jpg' />
</div> 
  Last line and many more to come.
</div>

Cover.XAML以下列方式从SlideBase继承

public abstract class SlideBase: System.Windows.Controls.UserControl
{

    #region DependecyProperty
    public static readonly DependencyProperty FilterOptionProperty =
        DependencyProperty.Register("FilterOption", typeof(FilterOptionsBase), typeof(SlideBase), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,OnFilterChanged));

    private static void OnFilterChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        SlideBase s = (SlideBase)d;
        (s.Content as FrameworkElement).DataContext = (FilterOptionsBase)e.NewValue;

    }
    public FilterOptionsBase FilterOption
    {
        get
        {
            return (FilterOptionsBase)GetValue(FilterOptionProperty);
        }
        set
        {
            SetValue(FilterOptionProperty, value);
        }
    }

    public static readonly DependencyProperty IsValidProperty =
        DependencyProperty.Register("IsValid", typeof(bool), typeof(SlideBase), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

    public virtual bool IsValid
    {
        get
        {
            return (bool)GetValue(IsValidProperty);
        }
        set
        {
            SetValue(IsValidProperty, value);
        }
    }

    #endregion
}

使用以下Cover.xaml.cs

<base:SlideBase
    xmlns:base="clr-namespace:WPFOPS.Model.OperatorLog.Models"
    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:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
    x:Class="WPFOPS.Views.OperatorLog.FilterWizard.Cover"    
    mc:Ignorable="d"
     Width="615" Height="370">
    <UserControl.Resources>
        <ResourceDictionary>
            <Storyboard x:Name="Animation01" RepeatBehavior="Forever">

我收到以下错误:

Error   - 项目配置:

这是VS2015中的WPF项目。目标框架4.5.2。平台目标&#34;任何CPU&#34;。

任何提示都非常受欢迎 感谢

2 个答案:

答案 0 :(得分:0)

因为它应该是

<base:SlideBase.Resources

答案 1 :(得分:0)

VS消息具有误导性。

问题与StoryBoard元素有关。它必须有一个键

 <Storyboard x:Key="Animation01" x:Name="Animation01" RepeatBehavior="Forever">

从codebehind我需要以这种方式访问​​它:

 public Cover():base()
        {
            InitializeComponent();

            //Loaded += (s, e) =>
            //{
            //    Animation01.Begin(); // THIS IS WRONG
            //};

            IsValid = true;
            this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
        }


        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            Storyboard sb = this.FindResource("Animation01") as Storyboard;                   
            sb.Begin();
        }

我很幸运,因为来自VS的所有错误消息绝对具有误导性。

我卸载了Views文件夹和ViewModels文件夹。我只使用&#34; .cs&#34;编译了项目。内部的文件,以便在设计时正确命名和找到所有名称空间(在本例中为SlideBase名称空间)。

我再次加载了Views和ViewModels文件夹,最后得到了与Storyboard相关的错误。

希望有所帮助