지난 포스팅(http://gongdo.tistory.com/69)에서 VS2005의 XAML 디자인뷰상의 버그에 대해 얘기했는데요, 이 버그를 피해가는 간단한 방법입니다.

우선 문제는 XAML 코드에서 Window 엘리먼트의 AllowsTransparency 어트리뷰트를 인식하지 못한다는 점이었습니다.
아주 간단하게 AllowsTransparency 어트리뷰트를 XAML에서 제거하고 코드-비하인드에서 해당 속성을 설정해주면 되는군요.

해당 XAML과 C#코드는 다음과 같습니다.

XAML
<Window x:Class="NonRectangularWindow.Window1"

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>

(AllowsTransparency 어트리뷰트를 제거했습니다.)

C#

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 디자인 뷰와 관련된 문제도 코드-비하인드를 적절하게 섞어서 사용하여 회피할 수 있을 것입니다.
신고
Posted by gongdo


티스토리 툴바