728x90
반응형

디스크의 남은 용량을 나타내는 프로그램 코드입니다.

 

MainWindow.xaml

 

<Window x:Class="WpfApp.MainWindow"

        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:local="clr-namespace:WpfApp"

        mc:Ignorable="d"

        Title="MainWindow" Height="450" Width="800">

    <StackPanel x:Name="stackPanel">

        <Label Content="전체 하드디스크 용량" HorizontalAlignment="Center" VerticalAlignment="Top"/>

        <Button x:Name="calButton" Content="계산하기" Width="200" Margin="0,0,0,20" Click="calButton_Click"/>

    </StackPanel>

</Window>

 

 

 

MainWindow.xaml.cs

 

using System;

using System.IO;

using System.Windows;

using System.Windows.Controls;

 

namespace WpfApp

{

    /// <summary>

    /// MainWindow.xaml에 대한 상호 작용 논리

    /// </summary>

    public partial class MainWindow : Window

    {

        public MainWindow()

        {

            InitializeComponent();

        }

 

        /// <summary>

        /// 계산하기 버튼 클릭 이벤트입니다.

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void calButton_Click(object sender, RoutedEventArgs e)

        {

            DriveInfo[] driveInfos = DriveInfo.GetDrives();

 

            foreach (DriveInfo driveInfo in driveInfos)

            {

                if (driveInfo.DriveType == DriveType.Fixed)

                {

                    ProgressBar progressBar = new ProgressBar() { HorizontalAlignment = HorizontalAlignment.Center };

 

                    // 전체 용량을 계산합니다.

                    progressBar.Maximum = Convert.ToInt32(driveInfo.TotalSize / 1024 / 1024);

 

                    // 남은 용량을 계산합니다. (MB)

                    progressBar.Value = Convert.ToInt32(driveInfo.TotalSize / 1024 / 1024) - Convert.ToInt32(driveInfo.AvailableFreeSpace / 1024 / 1024);

 

                    progressBar.Width = 200;

 

                    progressBar.Height = 20;

 

                    this.stackPanel.Children.Add(progressBar);

 

                    Label label = new Label() { HorizontalAlignment = HorizontalAlignment.Center };

 

                    label.Content = driveInfo.Name + " " + (driveInfo.TotalFreeSpace / 1024 / 1024) + "MB Free";

 

                    this.stackPanel.Children.Add(label);

                }

            }

        }

    }

}

 

 

계산하기 버튼을 클릭하면 디스크 남은 용량이 나열됩니다.

 

 

 

728x90
반응형
728x90
반응형

DrawingContext 의 영역을 벗어 나지 않도록 하기 위한 코드로

어떤 도형을 정의한 경우 그 도형을 벗어나서 글자들이 그려지는 것을 막는 코드입니다.

(dc : DrawingContext)

 

 

dc.PushClip(new RectangleGeometry(new Rect(new Point(0, 0), RenderSize)));

 

 

 

* 처리하지 않은 경우

 

* 처리한 경우

 

 

 

728x90
반응형
728x90
반응형

어떤 이유로 인해 오류 발생시 어플리케이션이 종료되는

현상을 막기 위한 코드입니다.

 

 

using System.Windows;

 

namespace WpfApp1

{

    /// <summary>

    /// App.xaml에 대한 상호 작용 논리

    /// </summary>

    public partial class App : Application

    {

        public App()

        {

            this.Dispatcher.UnhandledException       += this.Dispatcher_UnhandledException;

            this.Dispatcher.UnhandledExceptionFilter += this.Dispatcher_UnhandledExceptionFilter;

        }

 

        private void Dispatcher_UnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)

        {

            e.Handled = true;

        }

 

        private void Dispatcher_UnhandledExceptionFilter(object sender, System.Windows.Threading.DispatcherUnhandledExceptionFilterEventArgs e)

        {

            e.RequestCatch = true;

        }

    }

}

 

728x90
반응형
728x90
반응형

Panel 안의 모든 Button 에 같은 이벤트를 적용하는 방법입니다.

우선 각각 버튼에 이벤트를 주는 경우는 아래와 같습니다.

 

        public MainWindow()

        {

            InitializeComponent();

 

            StackPanel stack = new StackPanel();

            Content = stack;

            Random rand = new Random();

            for (int i = 0; i < 10; i++)

            {

                Button btn = new Button();

                btn.Name = ((char)('A' + i)).ToString();

                btn.FontSize += rand.Next(10);

                btn.Content = "Button " + btn.Name + " says 'Click me'";

                btn.Click += ButtonOnClick;

                stack.Children.Add(btn);

            }

        }

 

        void ButtonOnClick(object sender, RoutedEventArgs args)

        {

            Button btn = args.Source as Button;

            MessageBox.Show("Button " + btn.Name + " has been clicked", "Button Click");

        }

 

AddHandler 와 RoutedEventHandler 를 사용해 아래 처럼 하면 위 처리한 방식과 같은 처리가 가능합니다.

* 모든 버튼의 ClickEvent 를 하나의 이벤트(ButtonOnClick)로 연결시켜줍니다.

 

        public MainWindow()

        {

            InitializeComponent();

 

            StackPanel stack = new StackPanel();

            Content = stack;

            Random rand = new Random();

            for (int i = 0; i < 10; i++)

            {

                Button btn = new Button();

                btn.Name = ((char)('A' + i)).ToString();

                btn.FontSize += rand.Next(10);

                btn.Content = "Button " + btn.Name + " says 'Click me'";

                stack.Children.Add(btn);

            }

 

            stack.AddHandler(Button.ClickEvent, new RoutedEventHandler(ButtonOnClick));

        }

 

        void ButtonOnClick(object sender, RoutedEventArgs args)

        {

            Button btn = args.Source as Button;

            MessageBox.Show("Button " + btn.Name + " has been clicked", "Button Click");

        }

 

 

728x90
반응형
728x90
반응형

프로젝트에 특정 이미지 파일을 추가한 후

아래 처럼 사용하면 접근할수 있습니다.

 

* 이미지 파일명 (keisoft_textlogo.jpg)

 

        public MainWindow()

        {

            InitializeComponent();

 

            Title = "Show My Face";

            Uri uri = new Uri("pack://application:,,,/keisoft_textlogo.jpg");

            BitmapImage bitmap = new BitmapImage(uri);

            Image img = new Image();

            img.Source = bitmap;

            img.Stretch = Stretch.Fill;

            Content = img;

        }

 

 

728x90
반응형
728x90
반응형

방법은 아래 링크에 자세히 나와있다.

https://docs.microsoft.com/ko-kr/xamarin/xamarin-forms/platform/wpf

 

주의할 점

1. 프레임워크 대상 버전이 4.7 이상이어야한다.

2. MainWindow.xaml 내용의 처음을 Window -> wpf:FormsApplicationPage 으로 변경해야한다.

3. MainWindow.xaml.cs 에서 상속을 FormsApplicationPage 으로 변경해야한다.

4. 링크에도 나와있듯이 WPF 프로젝트에 설치한 Xamarin.Forms 의 버전과 다른 프로젝트들과 버전을 맞춰야한다.

 

아래는 기본 자마린 솔루션에서 WPF 프로젝트만 추가한 내용이다.

XamarinStudy.z01

XamarinStudy.z02

XamarinStudy.zip

 

아래는 실행한 WPF 결과

 

728x90
반응형
728x90
반응형

Visual Studio 2017 을 설치하고 프로젝트를 열었는데

system.windows.interactivity 관련 에러가 발생되었다.

dll 참조에 느낌표가 발생된것이다.

Visual Studio 2015 에서는 잘 돌아갔던 소스였는데.. 머지 하고 검색해 보니

Nuget 을 이용해서 설치하라는데.. 이건 프로젝트와 상관이 없는데... 왜 Nuget 에서 설치를 해야하지?

하고 찾고 있었는데 역시나 환경 문제 였다.

Visual Studio 에서 도구 및 기능 가져오기 로 진입

 

아래와 같은 화면이 나오면 우선 Vusial Studio 를 종료하고

상단의 개별 구성 요소 진입

 

SDK 라이브러리 및 프레임워크 에서 .NET 용 Blend for Visual Studio SDK 를 체크하여 설치를 진행하면 된다.

728x90
반응형
WPF
728x90
반응형

시작(WPF)
응용 프로그램 개발
WPF 기본 사항
액세스 가능성
컨트롤
데이터
문서
그래픽 및 멀티미디어
전역화 및 지역화
마이그레이션 및 상호 운용성
보안(WPF)
샘플(WPF)
일반 참조(WPF)
클래스 라이브러리(WPF)
도구(WPF)

출처 : HOONS.NET
728x90
반응형

'C#' 카테고리의 다른 글

(Linq) linq to xml  (0) 2017.04.14
(Linq) linq T Type Join result T Type  (0) 2017.04.14
(WPF) wpf 관련 리소스 정리  (0) 2017.04.13
(WPF) 챨스패졸드 책 정리  (0) 2017.04.13
(.NET) async, await 비동기 샘플 코드  (0) 2017.04.13
(.NET) 이펙티브 C# - 요점 정리  (0) 2017.04.13

+ Recent posts