2019년 1월 26일 토요일

WPF 상태바(Statusbar)

WPF 상태바(Statusbar)
WPF 응용 프로그램 창의 맨 아래쪽 창은 일반적으로 상태 표시 줄의 홈이다. 상태 표시 줄은 커서 위치, 단어 수, 작업 진행 상황 등 응용 프로그램의 현재 상태에 대한 다양한 정보를 표시하는 데 상태 표시 줄 기능을 응용 프로그램에 쉽게 추가 할 수있는 StatusBar 컨트롤이 제공된다.
[실습1] XAML을 이용한 간단한 상태바
현재 커서 위치를 보여주는 TextBlock 컨트롤, StatusBar는 컨트롤 세트를 가진 Panel 일 수도 있지만 StatusBar의 진정한 장점은 여러 정보 영역으로 나누어야 할 때이다.
[MainWindow.xaml.xml]
<Window x:Class="WpfApplication5.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:WpfApplication5"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<DockPanel>
<StatusBar DockPanel.Dock="Bottom">
<StatusBarItem>
<TextBlock Name="lblCursorPosition" />
</StatusBarItem>
</StatusBar>
<!AcceptsReturn은 엔터키를 입력시 개행이 되고자 할 때 사용 à
<TextBox AcceptsReturn="True" Name="txtEditor" SelectionChanged="txtEditor_SelectionChanged" />
</DockPanel>
</Window>
[MainWindow.xaml.cs]
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
namespace WpfApplication5
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void txtEditor_SelectionChanged(object sender, RoutedEventArgs e)
{
int row = txtEditor.GetLineIndexFromCharacterIndex(txtEditor.CaretIndex);
int col = txtEditor.CaretIndex - txtEditor.GetCharacterIndexFromLineIndex(row);
lblCursorPosition.Text = "Line " + (row + 1) + ", Char " + (col + 1);
}
}
}
[실습2] XAML을 이용한 간단한 상태바
이번 예제는 이전 예제를 보다 확장한 예제인데 제일 먼저해야 할 일은 StatusBar가 레이아웃을 위한 다른 패널을 사용하도록 만드는 것이다. 기본적으로 DockPanel을 사용하지만 DockPanel을 좀 더 복잡한 레이아웃으로 만들고 너비를 일정한 방식으로 조정하고 정렬 된 내용으로 그리드를 선택하는 것이 훨씬 더 좋다.
격자를 세 개의 영역으로 나눌 것인데 왼쪽과 오른쪽은 너비가 고정되고 가운데 열은 자동으로 나머지 공간을 차지한다. 또한 칼럼구분 기호를 컨트롤 사이의 열을 추가하는 예를 보여준다.
[MainWindow.xaml.xml]
<Window x:Class="WpfApplication5.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:WpfApplication5"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<DockPanel>
<StatusBar DockPanel.Dock="Bottom">
<StatusBar.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</StatusBar.ItemsPanel>
<StatusBarItem>
<TextBlock Name="lblCursorPosition" />
</StatusBarItem>
<Separator Grid.Column="1" />
<StatusBarItem Grid.Column="2">
<TextBlock Text="c:\path\of\current\file.txt" />
</StatusBarItem>
<Separator Grid.Column="3" />
<StatusBarItem Grid.Column="4">
<ProgressBar Value="50" Width="90" Height="16" />
</StatusBarItem>
</StatusBar>
<TextBox AcceptsReturn="True" Name="txtEditor" SelectionChanged="txtEditor_SelectionChanged" />
</DockPanel>
</Window>
[MainWindow.xaml.cs]
using System.Windows;
namespace WpfApplication5
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void txtEditor_SelectionChanged(object sender, RoutedEventArgs e)
{
int row = txtEditor.GetLineIndexFromCharacterIndex(txtEditor.CaretIndex);
int col = txtEditor.CaretIndex - txtEditor.GetCharacterIndexFromLineIndex(row);
lblCursorPosition.Text = "Line " + (row + 1) + ", Char " + (col + 1);
}
}
}

댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...