우선 문제는 XAML 코드에서 Window 엘리먼트의 AllowsTransparency 어트리뷰트를 인식하지 못한다는 점이었습니다.
아주 간단하게 AllowsTransparency 어트리뷰트를 XAML에서 제거하고 코드-비하인드에서 해당 속성을 설정해주면 되는군요.
해당 XAML과 C#코드는 다음과 같습니다.
xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="NonRectangularWindow" SizeToContent="WidthAndHeight"
WindowStyle="None" Background="Transparent"
MouseLeftButtonDown="Window1_MouseLeftButtonDown"
MouseDoubleClick="Window1_MouseDoubleClick"
>
<Image Source="pack://siteoforigin:,,,/res/만년삼.gif" Stretch="None" />
</Window>
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
namespace NonRectangularWindow
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : System.Windows.Window
{
public Window1()
{
InitializeComponent();
this.AllowsTransparency = true;
}
void Window1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
this.DragMove(); // 드래그 처리
}
void Window1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
this.Close(); // 윈도 닫기
}
}
}
달라진거라곤 Window 생성자 -여기에서는 Window1()- 에서 코드로 직접 AllowsTransparency를 true로 설정해줬다는 점 뿐입니다.
한가지 주의할 점은 AllowsTransparency와 같은 윈도 형태(appearance)와 관련된 일부 속성은 런타임 도중에 윈도가 이미 보여지고 있을 경우 변경이 불가능하다는 것입니다.
이 외에 다른 XAML 디자인 뷰와 관련된 문제도 코드-비하인드를 적절하게 섞어서 사용하여 회피할 수 있을 것입니다.
