簡體   English   中英

從WPF中的用戶控件繼承-成員不可訪問

[英]Inheriting from a User Control in WPF - members are not accessible

閱讀完有關同一參數的所有先前答案后,我將發布以下問題。 他們都沒有工作。

我正在創建一個向導,它由一定數量的幻燈片組成。 每個幻燈片都是一個用戶控件,並且繼承自一個名為“ 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以下列方式從SlideBase繼承

<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">

使用以下Cover.xaml.cs

namespace WPFOPS.Views.OperatorLog.FilterWizard
{

    public partial class Cover : SlideBase
    {
        public Cover():base()
        {
            InitializeComponent();

            Loaded+=(s,e)=> {
                Animation01.Begin();
            };

            IsValid = true;

        }

    }
}

我收到以下錯誤:

錯誤 -項目配置:

這是VS2015中的WPF項目。 目標框架4.5.2。 平台目標“任何CPU”。

任何提示都非常感謝

因為應該

<base:SlideBase.Resources

VS消息令人誤解。

問題與StoryBoard元素有關。 它必須有一個鑰匙

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

從代碼隱藏中,我需要以這種方式訪問​​它:

 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文件夾。 我只在其中包含“ .cs”文件的情況下編譯了項目,以便在設計時正確命名和找到所有名稱空間(在本例中為SlideBase名稱空間)。

我再次加載了Views和ViewModels文件夾,最后得到了與Storyboard相關的錯誤。

希望能幫助到你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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