💬

WPF開発時のトラブルシューティング

2022/08/16に公開

この記事について

概要

WPF開発時につまづいた点と、その対処方法を記録しておく。

対象読者

  • WPF開発をしている人

使用する開発環境

  • Microsoft Visual Studio Community 2022

プロジェクト全般

エラー「MC6029」が発生する

現象

プロジェクト生成直後にビルドすると以下のエラーが発生する。

エラーメッセージ
エラー	MC6029	'[プロジェクト名]' 名は、既定の名前空間 '[プロジェクト名]' では無効です。プロジェクト ファイル内の RootNamespace タグの値を修正してください。	[プロジェクト名]	C:\Program Files\dotnet\sdk\6.0.400\Sdks\Microsoft.NET.Sdk.WindowsDesktop\targets\Microsoft.WinFX.targets	223	

原因

プロジェクト作成時に、プロジェクト名にnamespaceに使用できない文字が含まれていて、自動的に使用できる文字に置換されてしまったため。

対処法

  1. App.xaml.csを開いてnamespace名を確認する。
App.xaml.cs
using System.Windows;

namespace ★置換されたnamespace名★
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App
    {
  1. [プロジェクト名].csprojに<RootNamespace></RootNamespace>タグを作成して、調べたnamespaceを記述する。
[プロジェクト名].csproj
 <Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
     <OutputType>WinExe</OutputType>
     <TargetFramework>net6.0-windows</TargetFramework>
     <UseWPF>true</UseWPF>
+    <RootNamespace>★ここに置換されたnamespace名を記述★</RootNamespace>
   </PropertyGroup>
 </Project>

XAML系

「'***'のバインドでDataContextが見つかりません」というメッセージが表示される

現象

デザイナーでXAMLファイルを編集中に「'***'のバインドでDataContextが見つかりません」というヒントメッセージが表示される。

原因

デフォルト状態ではDataContextが設定されていないため。

対処法

以下の通りDataContextを設定する。

*.xaml
 <Window
     x:Class="[クラス名]"
     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:prism="http://prismlibrary.com/"
+    xmlns:viewmodels="clr-namespace:[ViewModelsのnamespace名]"
     Title="{Binding Title}"
     Width="1280"
     Height="800"
+    d:DataContext="{d:DesignInstance Type=viewmodels:[ViewModel名]}"
-    prism:ViewModelLocator.AutoWireViewModel="True">
+    prism:ViewModelLocator.AutoWireViewModel="True"
+    mc:Ignorable="d">
     <Grid>
         <ContentControl prism:RegionManager.RegionName="ContentRegion" />
     </Grid>
 </Window>

Discussion