XAML で生成されたクラスから派生するクラスを定義する場合のビルド エラー MC6017
この記事は、拡張アプリケーション マークアップ言語 (XAML) で生成されたクラスから派生するクラスを定義するときに、ビルド エラー MC6017 が発生する問題を解決するのに役立ちます。
元の製品バージョン: .NET Framework
元の KB 番号: 957231
現象
Windows Presentation Foundation (WPF) アプリケーションがあります。 XAML を使用して定義された UserControl
などのクラスがあります。 からクラスを派生させます UserControl
。 例:
基底クラス:
<UserControl x:Class="WpfControlLibrary1.UserControlInXaml" xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" Height="300" Width="300"> <Grid> <StackPanel> <Button>Test</Button> </StackPanel> </Grid> </UserControl>
派生クラス:
<y:UserControlInXaml x:Class="WpfApplication1.UserControlFromXaml" xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" xmlns:y="clr-namespace:WpfControlLibrary1;assembly=WpfControlLibrary1" Height="300" Width="300"> <Grid> <CheckBox Height="16" Margin="8,30,0,0" Name="checkBox1" VerticalAlignment="Top" HorizontalAlignment="Left" Width="120">CheckBox</CheckBox> </Grid> </y:UserControlInXaml>
このような場合は、次のエラー メッセージが表示されます。
xyz は XAML エラーを使用して定義されているため、XAML ファイルのルートにすることはできません。
原因
現在、別の XAML 生成クラスから XAML 生成クラスを派生させる方法はサポートされていません。
解決方法
XAML を使用せずに、コード内で基底クラスをすべて定義します。
派生クラスは、デザイン時にデザイナーでインスタンス化されません。つまり、コンストラクターから基底クラスに対して行われた呼び出しは呼び出されません。 さらに、コンストラクターで基底クラスのコンテンツを初期化しようとすると、その Content
メンバーがまだ null に設定されていることがわかります。
これにより、実行時に派生クラスを設計している場合でも、基底クラスのコンテンツがデザイナーに表示されません。
回避策の 1 つは、基底クラスで次のようなコードを追加することです。
public class UserControlInCode : UserControl
{
protected override void OnContentChanged (object oldContent, object newContent)
{
base.OnContentChanged (oldContent, newContent);
StackPanel panel = new StackPanel ();
Button button = new Button ();
button.Content = "Test";
panel.Children.Add (button);
((IAddChild) newContent).AddChild (panel);
}
}
このようにして、基底クラスがメンバーを設定 Content
するまで待ちます。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示