'WPF'에 해당되는 글 8건
- 2009/10/28 VS2010 베타2의 WPF & Silverlight 디자이너 성능 향상 팁
- 2009/04/23 WPF Features Preview (3) - Styling the DataGrid
- 2009/04/19 WPF Features Preview (1) – DataGrid
- 2009/04/16 Windows SDK 설치 후 XAML 인텔리센스 문제
- 2009/04/09 WPF 4의 향상된 기능과 Windows 7 지원
- 2009/02/08 Semblio SDK
- 2009/02/07 MultiPoint SDK
- 2008/06/06 충남대학교 ProBrain 25차 공개세미나
WPF Features Preview (1) - DataGrid
WPF Features Preview (2) - DatePicker
맨 처음 초기 어플리케이션을 보면 스타일이 적용되어 멋지게 보입니다. DataGrid를 적용하여 수정된 버전은 좀 더 기능적이긴 하지만 밋밋하고 보기엔 좀...
이번에는 DataGrid에 스타일을 주어서 컬러풀하고 비주얼적으로 멋지게 만들어 보도록 하겠습니다.
프로젝트를 열고 MainWindow.xaml 파일을 열어서 DockPanel 부분을 보면 뭔가 스타일이 적용된것을 볼 수 있습니다. 이 중에서 몇가지 brush와 GridViewColumnHeader와 ListViewItem 스타일을 DataGrid 스타일에 적용해 보도록 하겠습니다.
DataGrid의 스타일 프로퍼티
1. CellStyle - 각각의 cell에 사용되는 스타일 (DataGridCell)
2. RowStyle - row에 사용되는 스타일 (DataGridRow)
3. ColumnHeaderStyle - header bar에 사용되는 스타일 (DataGridColumnHeader)
사용자가 grid와 상호작용하는 것에 대한 프로퍼티
1. SelectionMode - 단일선택과 확장된 선택에 대한 모드
2. SelectionUnit - 무엇이 선택되는가에 대한 설정 (FullRow vs Cell vs CellOrRowHeader)
3. GridLinesVisibility - cell 주변의 라인에 대한 속성
4. VerticalGridLinesBrush - 수직 라인에 대한 색상
5. HorizontalGridLinesBrush - 수평 라인에 대한 색상
먼저 TargetType으로 스타일이 적용될 타입에 대해 설정해줍니다.
TargetType 값에 GridViewColumnHeader를 dg:DataGridColumnHeader로 바꿔줍니다.
그리고 ListViewItem도 dg:DataGridRow로 바꿔줍니다.
변경된 xaml 코드는 아래와 같습니다.
<Style x:Key="dgHeaderStyle" TargetType="dg:DataGridColumnHeader">
<Setter Property="Background" Value="{StaticResource dgHeaderBrush}" />
<Setter Property="Foreground" Value="White" />
<Setter Property="BorderBrush" Value="{StaticResource dgHeaderBorderBrush}" />
</Style>
<Style x:Key="dgRowStyle" TargetType="dg:DataGridRow">
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="Background" Value="White" />
<Style.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
<Setter Property="Background" Value="#FFD0D0E0" />
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="LightGoldenrodYellow" />
</Trigger>
</Style.Triggers>
</Style>
DataGrid가 정의된 곳에는 ColumnHeaderStyle과 RowStyle 속성을 설정해줍니다.
<dg:DataGrid x:Name="dg" ItemsSource="{Binding}" Margin="10"
AutoGenerateColumns="False"
Background="#80909090" AlternationCount="2"
ColumnHeaderStyle="{StaticResource dgHeaderStyle}"
RowStyle="{StaticResource dgRowStyle}">
이제 어플리케이션을 실행해보면 스타일이 적용되어 이전과 다른 모습을 볼 수 있습니다.
이제 몇가지 grid에 대한 속성을 주도록 하겠습니다.
1. Extended 선택 모드 적용
2. SelecionUnit을 FullRow로 설정
3. GridLinesVisibility를 All로 설정
4. VerticalGridLinesBrush를 DarkGray로 설정
<dg:DataGrid x:Name="dg" ItemsSource="{Binding}" Margin="10"
AutoGenerateColumns="False"
Background="#80909090" AlternationCount="2"
ColumnHeaderStyle="{StaticResource dgHeaderStyle}"
RowStyle="{StaticResource dgRowStyle}"
SelectionMode="Extended"
SelectionUnit="FullRow"
GridLinesVisibility="All"
VerticalGridLinesBrush="DarkGray">
또 몇가지 설정을 해서 header 스타일을 주도록 해보겠습니다.
1. BorderTickness를 1로 주어서 border를 볼 수 있도록
2. pixel snapping을 활성화 (SnapsToDevicePixels="True")
3. 컨텐트 horizontal 정렬 (HorizontalContentAlignment="Center")
4. MinWidth="0" MinHeight="30" 으로 설정
5. 기본 커서 모양을 Hand로 설정
<Style x:Key="dgHeaderStyle" TargetType="dg:DataGridColumnHeader">
<Setter Property="Background" Value="{StaticResource dgHeaderBrush}" />
<Setter Property="Foreground" Value="White" />
<Setter Property="BorderBrush" Value="{StaticResource dgHeaderBorderBrush}" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="MinWidth" Value="0" />
<Setter Property="MinHeight" Value="30" />
<Setter Property="Cursor" Value="Hand" />
</Style>
다시 컴파일해서 실행해보면 좀 더 직관적으로 보기 쉽게 스타일 적용이 된 것을 볼 수 있습니다.
다음으로는 Cell 자체에 대한 스타일 적용을 해보겠습니다. Cell의 컨텐트가 가운데로 오고 필요할 때 포커스가 적용되면 좀 더 편리할 것 같은데 이것을 해보도록 하겠습니다.
새로운 스타일 속성을 DockPanel.Resources에 추가하도록 합니다.
1. TargetType을 dg:DataGridCell로 설정
2. 중요한 속성은 기본 DataGridCell을 따르기 위해 BasedOn 프로퍼티 설정
"{StaticResource{x:Type dg:DataGridCell}}"
3. SnapsToDevicePixels를 "True"로 설정
4. VerticalAlignment를 "Center"로 설정
5. Trigger 컬렉션 추가 - 셀이 선택되었을 때 background/foreground 색상 변경
6. <Style.Triggers> 부분에 IsSelected 프로퍼티를 True로 설정하고
a. Background를 Transparent로
b. BorderBrush를 Transparent로
c. Foreground를 Black으로
7. 두번째 trigger를 추가하고 IsKeyboardFocusWithin="True" 프로퍼티에
a. Background에 "{StaticResource whiteBackBrush}" 리소스
b. BorderBrush에 "{DynamicResource{x:Static dg:DataGrid.FocusBorderBrushKey}}" 리소스
c. Foreground에 Black
<Style x:Key="dgCellStyle" TargetType="dg:DataGridCell"
BasedOn="{StaticResource {x:Type dg:DataGridCell}}">
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="VerticalAlignment" Value="Center" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Transparent" />
<Setter Property="BorderBrush" Value="Transparent" />
<Setter Property="Foreground" Value="Black" />
</Trigger>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter Property="Background" Value="{StaticResource whiteBackBrush}" />
<Setter Property="BorderBrush"
Value="{DynamicResource {x:Static dg:DataGrid.FocusBorderBrushKey}}" />
<Setter Property="Foreground" Value="Black" />
</Trigger>
</Style.Triggers>
</Style>
그리고 DataGrid 속성에 CellStyle 프로퍼티값을 줍니다.
<dg:DataGrid x:Name="dg" ItemsSource="{Binding}" Margin="10"
AutoGenerateColumns="False"
Background="#80909090" AlternationCount="2"
ColumnHeaderStyle="{StaticResource dgHeaderStyle}"
RowStyle="{StaticResource dgRowStyle}"
CellStyle="{StaticResource dgCellStyle}"
SelectionMode="Extended"
SelectionUnit="FullRow"
GridLinesVisibility="All"
VerticalGridLinesBrush="DarkGray">
이제 Cell을 클릭해보면 색이 적용되어 하이라이트 되는것을 볼 수 있습니다.
마지막으로 RowDetail 속성을 설정하도록 하겠는데 위에서 했던 방법과 비슷하니 자세한 설명은 생략하겠습니다. xaml 코드를 보면 어렵지 않게 이해 할 수 있을 것입니다.
<dg:DataGrid x:Name="dg" ItemsSource="{Binding}" Margin="10" ...
VerticalGridLinesBrush="DarkGray"
RowDetailsVisibilityMode="VisibleWhenSelected">
<dg:DataGrid.RowDetailsTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="20,0,0,0">
<TextBlock />
<TextBox />
</StackPanel>
</DataTemplate>
</dg:DataGrid.RowDetailsTemplate>
TextBlock 속성
<StackPanel Orientation="Horizontal" Margin="20,0,0,0">
<TextBlock Text="Category:" VerticalAlignment="Center" FontWeight="Bold" />
<TextBox />
TextBox 생성
<dg:DataGrid.RowDetailsTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="20,0,0,0">
<TextBlock Text="Category:" VerticalAlignment="Center" FontWeight="Bold" />
<TextBox Text="{Binding Category}" Margin="10,5" MinWidth="100">
<TextBox.Style>
<Style TargetType="TextBox">
<Setter Property="BorderBrush" Value="{x:Null}" />
<Setter Property="Background" Value="{x:Null}" />
<Style.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="BorderBrush"
Value="{x:Static SystemColors.WindowFrameBrush}" />
<Setter Property="Background"
Value="{x:Static SystemColors.WindowBrush}" />
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderBrush"
Value="{x:Static SystemColors.WindowFrameBrush}" />
<Setter Property="Background"
Value="{x:Static SystemColors.WindowBrush}" />
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</StackPanel>
</DataTemplate>
</dg:DataGrid.RowDetailsTemplate>
이제 모든 스타일 적용이 끝났습니다. 실행을 해보면 위에서 적용한 스타일이 적용되어 처음의 DataGrid보다 훨씬 보기도 좋고 스타일이 좋아진것을 알 수 있습니다.
지금까지 DataGrid에 대해 알아보았는데 다음에는 역시 새롭게 추가된 Ribbon 컨트롤에 대해 알아보겠습니다.
WPF에서도 기존의 메뉴와 툴바를 벗어나서 새로운 Ribbon 스타일을 적용할 수 있는데 이것 역시 어렵지 않게 할 수 있으니 기대해주세요.
WPF 4에서는 새로운 컨트롤들이 포함되게 되는데 대표적으로 DataGrid, Ribbon, VIsual State Manager 컨트롤이 있습니다.
WPF Features Privew를 통해서 새로운 컨트롤들을 미리 보는 시간을 가져보겠습니다.
Exercise 1 - Using the new WPF DataGrid
먼저 기존에 있는 Checkbook 어플리케이션을 살펴보면 ListView를 이용해서 DataGrid 형태로 사용하는 것을 볼 수 있습니다.
이번 실습에서는 몇가지 단계를 따르게 되는데 다음과 같습니다.
1. DataGrid 어셈블리 추가 (WPF Toolkit)
2. ListView와 GridView를 DataGrid로 교체
3. 스타일과 템플릿 변형
먼저 WPF 어플리케이션을 실행해보면 몇가지 데이터가 바인딩된 어플리케이션 형태를 볼 수 있습니다.
Task 1 - Examine the existing application
CheckbookManager 어플리케이션을 Visual Studio를 이용해서 열어서 살펴보면 어떤 형태로 동작하는지 쉽게 알 수 있습니다.
이제 소스코드를 살펴보면 메인 윈도우인 MainWindow.xaml에 보면 ListView가 정의된것을 볼 수 있습니다. 스타일과 컬럼 효과를 이용해서 형태를 정의하고 있는데 column definition은 템플릿을 필요로 하게 됩니다. 왜냐하면 기본적인 ListView 컬럼은 읽기 전용 속성이기 때문입니다.
이것을 TextBox를 이용해서 DataGrid처럼 표현하고 있는것을 볼 수 있습니다.
Data 폴더에 보면 자료구조가 정의되어 있는데 여기서 살펴볼것은 아니니 그냥 넘어가도록 하겠습니다.
Task 2 - Using the DataGrid
이번 단계에서는 ListView를 WPF DataGrid로 교체해보도록 하겠습니다.
먼저 DataGrid를 포함하고 있는 WPFToolkit 어셈블리를 참조합니다.
참조 추가를 선택하고 WPFToolkit.dll 파일을 선택해주면 됩니다.
그리고 나서 MainWindow.xaml 상단에 보면 네임스페이스가 정의된 부분이 있는데 여기에 WPF Toolkit을 추가해줍니다.
접두어를 붙여주고 Microsoft.Windows.Controls 네임스페이스를 선택해주면 WPFToolkit이 등록됩니다.
스크롤을 좀 더 내려서 XAML을 살펴보면 ListView가 있는데 ListView를 dg:DataGrid로 바꿔서 DataGrid 컨트롤을 사용할 수 있게 해줍니다.
물론 바꾸고 나면 많은 에러가 나게 되는데 이것은 차차 고쳐 나갈것입니다.
그리고 ItemContainerStyle 속성을 지워줍니다. 이것은 나중에 다시 해줄텐데 우선 지우도록 하겠습니다.
그리고 TextBox 스타일 리소스 역시 지워줍니다. 우리는 새로운 데이타 컬럼 타입을 사용하게 되니 더 이상필요하지 않습니다.
ListView의 ContextMenu 속성 역시 dg:DataGrid로 바꿔줍니다.
이렇게 해주면 다음과 같은 XAML 형태를 가지게 됩니다.
<!-- DataGrid fills remainder of space -->
<dg:DataGrid x:Name="dg" ItemsSource="{Binding}" Margin="10"
Background="#80909090" AlternationCount="2">
<dg:DataGrid.ContextMenu >
<ContextMenu >
<MenuItem Header="Copy Selected Transactions"
Command="{x:Static ApplicationCommands.Copy}" />
</ContextMenu>
</dg:DataGrid.ContextMenu>
<!-- <ListView.View> ...
</ListView.View> -->
</dg:DataGrid>
이제 어플리케이션을 컴파일하고 다시 실행시켜 보면 DataGrid가 자동적으로 컬럼을 생성해서 데이터를 보여주는것을 볼 수 있습니다.
다시 소스코드로 돌아와서 컬럼 타입을 정의해주도록 하겠습니다.
DataGrid 안에 <dg:DataGrid.Columns>를 추가 해 줍니다.
그리고 <dg:DataGridTextColumn> 요소를 위의 컬럼 컬렉션 안에 추가 해 줍니다.
Header 프로퍼티는 Header 텍스트값의 속성이고 Width는 컬럼의 폭을 정할 수 있는데 고정값을 줄 수도 있고 컬럼의 헤더나 셀 사이즈에 맞게 해줄 수도 있습니다.
마지막으로 컬럼에 데이터 바인딩을 해줘야 하는데 Binding 속성을 이용해서 ListView에서 해줬던것 처럼 같은 방식으로 해주면 됩니다.
<dg:DataGrid x:Name="dg" ItemsSource="{Binding}" Margin="10"
Background="#80909090" AlternationCount="2">
<dg:DataGrid.Columns>
<dg:DataGridTextColumn Header="No." Width="SizeToCells"
Binding="{Binding CheckNumber}" />
</dg:DataGrid.Columns>
여기까지 하고 실행을 해보면 새로 정의해준 컬럼이 추가되긴 했지만 기존 컬럼이 그대로 남아있는것을 볼 수 있습니다.
DataGrid 속성중에 AutoGenerateColumns라는 속성이 기본적으로 True값을 가지게 되어 이렇게 되는데 이 속성을 False로 바꿔주면 정의된 컬럼만 나타나게 됩니다.
<dg:DataGrid x:Name="dg" ItemsSource="{Binding}" Margin="10"
AutoGenerateColumns="False"
Background="#80909090" AlternationCount="2">
그리고 나머지 컬럼들에 대해서도 속성을 정의해주면 됩니다.
DataGridCheckBoxColumn
DataGridComboBoxColumn
DataGridHyperlinkColumn
DataGridTextColumn
DataGridTemplateColumn
이름을 보면 알 수 있듯이 DataGrid 안에서 일반 컨트롤과 같은 역할을 하게 됩니다.
이러한 컬럼 스타일을 이용해서 원하는 데이터에 맞게 설정을 해주면 초기의 ListVIew에서 보여줬던 형태를 DataGrid로 만들 수 있습니다.
<dg:DataGrid x:Name="dg" ItemsSource="{Binding}" Margin="10"
AutoGenerateColumns="False"
Background="#80909090" AlternationCount="2">
...
<dg:DataGrid.Columns>
<dg:DataGridTextColumn Header="No." Width="SizeToCells"
Binding="{Binding CheckNumber}" />
<dg:DataGridTextColumn Header="Date" Binding="{Binding Date, StringFormat=d}" />
<dg:DataGridTextColumn Header="Pay To" MinWidth="200"
Binding="{Binding Recipient}" />
<dg:DataGridComboBoxColumn Header="Memo" Width="*"
ItemsSource="{Binding Source={x:Static Data:CheckBook.Descriptions},
Mode=OneWay}"
TextBinding="{Binding Memo}">
<dg:DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="IsEditable" Value="True" />
</Style>
</dg:DataGridComboBoxColumn.EditingElementStyle>
</dg:DataGridComboBoxColumn>
<dg:DataGridCheckBoxColumn Header="C" Width="SizeToHeader"
Binding="{Binding Cleared}"
ElementStyle="{DynamicResource NoBorderCheckBoxStyle}"
EditingElementStyle="{DynamicResource NoBorderCheckBoxStyle}" />
<dg:DataGridTextColumn Width="SizeToCells" Header="Payment"
Binding="{Binding Amount, Converter={StaticResource amountConverter},
ConverterParameter=0, StringFormat=C}" />
<dg:DataGridTextColumn Width="SizeToCells" Header="Deposit"
Binding="{Binding Amount, Converter={StaticResource amountConverter},
ConverterParameter=1, StringFormat=C}" />
<dg:DataGridTemplateColumn Width="SizeToCells" Header="Balance"
ClipboardContentBinding="{Binding TotalBalance}">
<dg:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Foreground="{Binding TotalBalance,
Converter={StaticResource BalanceDisplayConverter}}"
Text="{Binding TotalBalance, StringFormat=C}" />
</DataTemplate>
</dg:DataGridTemplateColumn.CellTemplate>
</dg:DataGridTemplateColumn>
</dg:DataGrid.Columns>
</dg:DataGrid>
여기까지 마치고 실행해보면 정의해준 컬럼 스타일에 맞게 데이터가 바인딩되어 보이게 됩니다.
지금까지 WPF Toolkit을 이용해서 DataGrid를 추가하고 컬럼 속성 스타일을 주어서 데이타 바인딩하는 방법까지 살펴보았습니다.
다음에는 여기에 추가해서 Calendar와 DatePicker 컨트롤을 이용해서 데이터 필드를 구성하는것에 대해 보도록 하겠습니다.
참고자료
WPF Toolkit : http://www.codeplex.com/wpf
Windows SDK 설치 후 XAML을 사용하는 프로젝트에서 인텔리센스가 동작하지 않는 문제가 있습니다.
Windows SDK가 설치 된 후 Visual Studio의 레지스트리 값이 변경되어 dll 연결이 깨져버린 현상입니다.
regedit 명령어를 이용해서 레지스트리 편집기를 연 후 다음 키를 살펴봅니다.
x86
HKEY_CLASSES_ROOT\CLSID\{73B7DC00-F498-4ABD-AB79-D07AFD52F395}\InProcServer32
x64
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{73B7DC00-F498-4ABD-AB79-D07AFD52F395}\InProcServer32
이 항목이 없다면 인텔리센스 문제가 생길 것입니다.
두 가지 해결 방법이 있는데 제어판의 프로그램 추가/삭제에서 Visual Studio 2008을 복구 하거나
수동으로 dll 파일을 등록해주면 됩니다.
수동으로 dll 파일 연결 방법은 다음과 같으니 시스템에 맞게 해주시면 됩니다.
x86
regsvr32 "%CommonProgramFiles%\Microsoft Shared\MSEnv\TextMgrP.dll"
x64
regsvr32 "%CommonProgramFiles(X86)%\Microsoft Shared\MSEnv\TextMgrP.dll"
이렇게 해주고 다시 확인해보면 인텔리센스가 정상적으로 작동하는 것을 확인 할 수 있습니다.
WPF가 발표된지도 많은 시간이 흘렀지만 아직 WPF를 사용한 어플리케이션이 많이 나오지 않는 것이 현실입니다. 앞으로 Visual Studio 2010과 .NET Framework 4.0이 발표되면 WPF 역시 4.0으로 버전업이 되는데 이제 현실적으로 많이 사용 될 수 있을 정도로 많은 발전이 있습니다.
알려진 바와 같이 Visual Studio 2010 IDE에서도 WPF가 사용될 정도로 성능이나 여러 면에서 많은 발전이 있는 것이 사실입니다.
이번 MIX09 행사의 WPF4 소개 세션 자료를 보면 매우 많은 요소가 향상된 것을 볼 수 있습니다.
이 중에서 가장 눈에 띄는 것은 아무래도 Multi-Touch 지원이 되겠는데 이 것은 Windows 7에서 기본으로 Multi-Touch를 지원 하게 됨으로써 WPF에서도 이를 활용한 어플리케이션 개발을 할 수 있게 되었습니다.
이 외에도 중요한 몇 가지를 보면 Windows 7에서 새롭게 바뀐 Taskbar와 Office 2007에서 사용된 Ribbon UI를 기본으로 지원하게 되고 다양한 새로운 컨트롤과 .NET Framework 4에서 향상된 언어 기능들도 추가 되었습니다.
이런 향상된 기능들을 지원하기 위해 WPF에서 어떤 변화가 있는지 자세히 알아보도록 하겠습니다.
UIElement 변화
WPF 개발을 해보신 분들은 UIElement 클래스에 대해 잘 알고 계실겁니다. UIElement 클래스는 WPF의 가장 기본이 되는 최상위 기본 클래스인데 멀티터치 지원을 위해서 내부적으로 몇 가지 변화가 생겼습니다. 우선 기존의 이벤트로는 멀티 터치를 지원 할 수 없기 때문에 멀티터치와 제스처 인식을 위한 이벤트가 추가 되었습니다.
멀티터치 지원 컨트롤
ScrollViewer 컨트롤의 경우 제스처 인식을 하도록 업데이트 되었고 다른 기본 컨트롤들도 멀티터치 지원을 위해 업데이트 되었습니다. 동시에 하나 이상의 포인트를 인식하기 위해 멀티캡쳐 기능도 지원하게 되었습니다. 이 외에도 ScatterView 같은 멀티터치를 위한 새로운 컨트롤도 추가 되었습니다.
Surface SDK 2.0 호환
Sufrace SDK 2.0의 호환으로 Surface 컴퓨터의 멀티터치 어플리케이션 개발을 쉽게 할 수 있습니다.
Windows 7에서는 기존보다 향상된 태스크바를 제공하는데 이를 지원하기 위한 내용이 포함 되었습니다.
Windows 7에서 추가되거나 향상된 API들을 사용하기 위해서는 C, C++, COM API 같은 네이티브 코드를 사용해야 합니다. 그러나 C# 등의 매니지드 코드를 사용하는 닷넷 개발자에게는 이것이 어렵게 느껴 질 수 있습니다. 그렇다고 새로운 멋진 기능들을 포기하자니 아쉽고 네이티브 코드를 사용하자니 불편하고 좀 더 편하게 할 수 있는 방법은 없을까요?
이러한 것을 해결 하기 위해 Microsoft에서는 Windows Vista Bridge project를 만들었는데 이것을 사용하면 매니지드 코드 개발자가 Windows API를 쉽게 사용 할 수 있습니다. 현재 최신 버전은 1.4인데 Restart and Recovery, Search, Power Awareness and other Shell integrations 같은 Windows Vista의 많은 유용한 기능들을 포함 하고 있습니다. 그러나 현재 버전은 Windows7의 기능들을 포함하고 있지는 않습니다.
Windows7은 현재 베타가 공개되었고 조만간 RC버전이 나온다고 하는데 Windows 7의 API 지원을 위한 Windows API Code Pack for the .NET Library(이것은 Windows Vista Bridge의 새 이름)도 함께 개발중으로 같이 배포 될 예정입니다.
현재는 Windows Vista Bridge에서 약간 수정된 버전으로 Windows 7 API 일부를 지원하는 샘플 라이브러리가 있는데 이것은 다음에 자세히 알아 보도록 하겠습니다.
Visual Studio 2008에서는 MFC를 사용하여 Ribbon UI를 개발 할 수 있습니다. 그런데 WPF에서는 기본적으로는 Ribbon UI를 지원하지 못하고 WPF Toolkit을 통해서 따로 지원하고 있는데 WPF 4에서는 Ribbon UI를 기본적으로 지원하게 됩니다.
윈도우 프로젝트에서 많이 쓰이는 컨트롤 중 하나가 데이터 그리드나 달력 컨트롤 등이 있는데 WPF 기본 컨트롤에서는 지원하지 않고 WPF Toolkit으로 따로 지원하고 있습니다. Ribbon과 마찬가지로 이것도 역시 WPF 4에서는 기본으로 포함되게 됩니다. 이 외에도 Silverlight에서 지원하고 있는 차트 컨트롤 등도 WPF에서 역시 지원하게 됩니다.
대표적으로 살펴 본 것 외에도 많은 변화가 있고 향상 되었습니다. 다음 포스팅 부터는 이번에 살펴본 것을 중심으로 실제로 어떻게 사용하고 구현하게 되는지 자세히 알아보도록 하겠습니다.
앞으로 Visual Studio 2010과 WPF 4의 향상된 기능 많이 기대 해주세요 :)
일 시 : 2008년 5월 26일 월요일 저녁 7시 장 소 : 충남대학교 공대2호관 103호 주 제 : 강력해진 UI 개발 Windows Presentation Foundation MSP 면접을 이틀 앞두고 했던 공개 세미나... 개인적으로 동아리에서 두번째 공개세미나인데 두번 모두 준비 시간이 며칠 안되어서 아쉬웠음;; 동아리 일정상 급박할 때 평소에 공부를 열심히(?) 하는 내가 투입되어서 그런듯 -_- 다음 기회에는 준비 시간도 넉넉히 갖고 내용도 깊고 어려운 내용으로 한번 하고 싶음 ㅎㅎ 그래도 사진이 남아서 다행 ㅋㅋ 첫번째 세미나는 사진이 없어서..ㅠㅠ |
CheckbookManager.zip
25차공개세미나_WPF.pdf