質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

2回答

4860閲覧

WPFでメッセージボックスの残骸?のようなものが残る

suzuki123

総合スコア18

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

1クリップ

投稿2016/11/04 07:02

編集2016/11/07 03:48

XAML上で配置したImageにボタン押下をトリガーに画像を表示し、その後メッセージボックスを出すという単純なプログラムを作成しました。

挙動確認した所、表示されたメッセージボックスを閉じた際に、タイトルに記載した奇妙な現象がImage上に発生しました。

メッセージボックスを少し動かした後に閉じると、この現象は発生しません。
何が原因でこのような現象になったのかご教授お願い致します。
※実際に現象が起きたソースコードも載せます。

###該当のソースコード

MainWindow.xaml

1<Window x:Class="WpfTest.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:local="clr-namespace:WpfTest" 6 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 7 Title="MainWindow" 8 Width="300" 9 Height="300" 10 mc:Ignorable="d"> 11 <Grid> 12 <Grid Width="150" 13 Height="300" 14 HorizontalAlignment="Left" 15 VerticalAlignment="Top" 16 Background="DimGray"> 17 <Image x:Name="image" 18 Margin="10,10,10,10" 19 HorizontalAlignment="Left" 20 VerticalAlignment="Top" 21 Stretch="None" /> 22 </Grid> 23 <Button x:Name="button" 24 Width="75" 25 Margin="155,10,0,0" 26 HorizontalAlignment="Left" 27 VerticalAlignment="Top" 28 Content="Button" /> 29 30 </Grid> 31</Window>

MainWindow.xaml.cs

1using System; 2using System.Collections.Generic; 3using System.IO; 4using System.Linq; 5using System.Text; 6using System.Threading.Tasks; 7using System.Windows; 8using System.Windows.Controls; 9using System.Windows.Data; 10using System.Windows.Documents; 11using System.Windows.Input; 12using System.Windows.Media; 13using System.Windows.Media.Imaging; 14using System.Windows.Navigation; 15using System.Windows.Shapes; 16using System.Windows.Threading; 17 18namespace WpfTest 19{ 20 public static class ExtensionMethods 21 { 22 private static Action EmptyDelegate = delegate () { }; 23 public static void Refresh(this UIElement uiElement) 24 { 25 uiElement.Dispatcher.Invoke(DispatcherPriority.Render, EmptyDelegate); 26 } 27 } 28 29 /// <summary> 30 /// MainWindow.xaml の相互作用ロジック 31 /// </summary> 32 public partial class MainWindow : Window 33 { 34 public MainWindow() 35 { 36 InitializeComponent(); 37 38 WindowStartupLocation = WindowStartupLocation.CenterScreen; 39 40 button.Click += new RoutedEventHandler(OnClick); 41 } 42 43 private void OnClick(object sender, RoutedEventArgs e) 44 { 45 string path = @"C:\WpfTest\WpfTest\img\test.png"; 46 47 //画像描画 48 BitmapImage wkBmp = new BitmapImage(); 49 FileStream fs = File.OpenRead(path); ; 50 wkBmp.BeginInit(); 51 wkBmp.CacheOption = BitmapCacheOption.OnLoad; 52 wkBmp.CreateOptions = BitmapCreateOptions.None; 53 wkBmp.StreamSource = fs; 54 wkBmp.EndInit(); 55 wkBmp.Freeze(); 56 fs.Dispose(); 57 58 image.Source = wkBmp; 59 60 MessageBox.Show("テスト"); 61 62 //this.Refresh(); //全体(効果なし) 63 //image.Refresh(); //個別(効果なし) 64 } 65 66 } 67}

###補足情報(言語/FW/ツール等のバージョンなど)
Windows7 Pro 64bit
visual studio 2015 pro
.NETフレームワーク 4.5.2
テーマ:Windows7 ベーシック
画像:800*600の全て黒で塗りつぶしたpng画像(paintで作成)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tak1wa

2016/11/04 15:22

Win 7 Enterprise 64bit のベーシックで再現取れませんでした。(私の環境の都合でframework3.5に落としました)例えばテーマや画像が提示条件と異なる場合だと発生しなくなるのでしょうか?なんとなく発生するとすればOSに依存しそうな気もしますが。
guest

回答2

0

解決策ではなくすみません。

もしかして Windows7でClassicモードでのみ発生してますか?
私も経験(5~6年前ですが)ありますがWPFはClassicモードでWindowのゴースト(同じくメッセージボックスでした)が残ることがありました。
結局解決せずでした。WPFの実装自体に問題があるようでした。GDIでの描画時になんかおかしい。
最近ではエントリーマシンでもソコソコの性能のGPUが使用可能なためClassicモードでのゴースト発生は目をつぶってもらいました。

投稿2016/11/07 04:17

編集2016/11/07 04:20
Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

suzuki123

2016/11/08 01:27

最初に発生した時は、テーマが「Windows クラシック」でしたが、「Windows7 ベーシック」に切り替えても発生しています。 ただし、環境によって出たりしたので、現状原因は不明です。 描画方式は一般的なWPF作法ですが、GDI作法で試したプロジェクトでも同様の現象が起きるので、描画方式は関係無いかなと思っています。
Y.H.

2016/11/09 15:53

WPFでもテーマのクラシックやベーシックではGDI+で描画されるのでGDI+関連処理に問題があり根本的な解決はMicrosoftにしかできないのではと思ってます
guest

0

自己解決

原因に関しては未だ不明ですが、現象が発生しない条件を発見しました。
色々試した内容を以下に記述します。


・CMOSクリアをする
→現象発生

・モニタードライバを最新の物にする
→現象発生

・グラフィックボードを挿す
→現象発生

・モニターを変えてみる(使っていたモニターより新しい物)
→現象発生

・モニターをDVIからHDMIに変えてみる
→現象発生

・別PCで動かしてみる。
→現象発生せず
※テーマは同じ物で動作確認した
※exe直とデバッグ実行の両方で確認した

・.NETフレームワークを4.5.2 -> 4に変えてみる
→現象発生
※「3.5」だとXAMLでエラー発生した為、「4」で試しました

・テーマを「Windows7 Aero」に変えてみる
→現象発生せず
※どの環境でも発生しなかった。(3PCで確認)

投稿2016/11/07 03:47

suzuki123

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問