MS 예제 실행화면
로그인 사용자를 선택할때마다 배경 밑 컨트롤의 스타일이 바뀐다.
프로젝트구성
Resources_*.xaml 파일은 각각의 컨트롤의 스타일을 가지고 있다.
예로 버튼의 스타일을 보면
Resources_Default.xaml
<Style x:Key="ButtonStyler"
TargetType="{x:Type Button}">
<Setter Property="FontFamily"
Value="{DynamicResource {x:Static SystemFonts.MessageFontFamilyKey}}" />
<Setter Property="FontSize"
Value="{DynamicResource {x:Static SystemFonts.MessageFontSizeKey}}" />
<Setter Property="FontStyle"
Value="{DynamicResource {x:Static SystemFonts.MessageFontStyleKey}}" />
<Setter Property="FontWeight"
Value="{DynamicResource {x:Static SystemFonts.MessageFontWeightKey}}" />
<Setter Property="Foreground"
Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" />
<Setter Property="HorizontalContentAlignment"
Value="Center" />
<Setter Property="VerticalContentAlignment"
Value="Center" />
<Setter Property="ClipToBounds"
Value="True" />
<Setter Property="Padding"
Value="2" />
<Setter Property="Margin"
Value="10" />
<Setter Property="Height"
Value="30" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Rectangle x:Name="GelBackground"
Opacity="1"
RadiusX="4"
RadiusY="4"
Fill="{TemplateBinding Background}"
Stroke="Black"
StrokeThickness="1" />
<ContentPresenter x:Name="ContentSite"
Margin="{TemplateBinding Padding}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver"
Value="true">
<Setter Property="Rectangle.Fill"
Value="#cccccc"
TargetName="GelBackground" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Resources_Luna.xaml
<Style x:Key="ButtonStyler"
TargetType="{x:Type Button}">
<Setter Property="FontFamily"
Value="{DynamicResource {x:Static SystemFonts.MessageFontFamilyKey}}" />
<Setter Property="FontSize"
Value="{DynamicResource {x:Static SystemFonts.MessageFontSizeKey}}" />
<Setter Property="FontStyle"
Value="{DynamicResource {x:Static SystemFonts.MessageFontStyleKey}}" />
<Setter Property="FontWeight"
Value="{DynamicResource {x:Static SystemFonts.MessageFontWeightKey}}" />
<Setter Property="Foreground"
Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" />
<Setter Property="HorizontalContentAlignment"
Value="Center" />
<Setter Property="VerticalContentAlignment"
Value="Center" />
<Setter Property="ClipToBounds"
Value="True" />
<Setter Property="Padding"
Value="2" />
<Setter Property="Margin"
Value="10" />
<Setter Property="Height"
Value="30" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Rectangle x:Name="GelBackground"
Opacity="1"
RadiusX="4"
RadiusY="4"
Stroke="black"
StrokeThickness="1">
<Rectangle.Fill>
<LinearGradientBrush StartPoint="0,0"
EndPoint="0,1">
<GradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="white"
Offset="0" />
<GradientStop Color="#99ccff"
Offset="1" />
</GradientStopCollection>
</GradientBrush.GradientStops>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<Rectangle x:Name="GelShine"
Margin="2,2,2,0"
VerticalAlignment="top"
RadiusX="6"
RadiusY="6"
Opacity="0"
Stroke="transparent"
Height="15px">
<Rectangle.Fill>
<LinearGradientBrush StartPoint="0,0"
EndPoint="0,1">
<GradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="#ccffffff"
Offset="0" />
<GradientStop Color="transparent"
Offset="1" />
</GradientStopCollection>
</GradientBrush.GradientStops>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<ContentPresenter x:Name="ContentSite"
Margin="{TemplateBinding Padding}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver"
Value="true">
<Setter Property="Rectangle.Fill"
Value="#99ccff"
TargetName="GelBackground"/>
<Setter Property="Rectangle.Opacity"
Value="1"
TargetName="GelShine"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
각각 버튼의 스타일이 다른것을 알수있다.
비하인드 코드에서 적용하기
특별한거 없고 ResourceDictionary 생성해서
switch (UserTilesListBox.SelectedIndex)
{
case 0:
Application.Current.Resources = _defaultTheme;
break;
case 1:
Application.Current.Resources = _lunaTheme;
break;
case 2:
Application.Current.Resources = _xBoxTheme;
break;
case 3:
Application.Current.Resources = _toonsTheme;
break;
}
사용자 선택시마다 리소스를 적용한다.
namespace LogonScreen
{
using System;
using System.Collections;
using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Navigation;
using System.Windows.Markup;
using System.Windows.Input;
using System.Windows.Media.Animation;
public partial class Default
{
private static bool resourceLoaded = false;
ResourceDictionary _defaultTheme ; //리소스 만들기
ResourceDictionary _lunaTheme;
ResourceDictionary _toonsTheme ;
ResourceDictionary _xBoxTheme;
private void Init (object sender, System.EventArgs args)
{
_defaultTheme = new Resources_Default();
_lunaTheme = new Resources_Luna();
_toonsTheme = new Resources_Toons();
_xBoxTheme = new Resources_XBox();
Application.Current.Resources = _defaultTheme;
}
private void OnMouseEnter(object sender, MouseEventArgs args)
{
resourceLoaded = true;
}
void ChangeUser (object sender, SelectionChangedEventArgs e)
{
if (!resourceLoaded)
return;
switch (UserTilesListBox.SelectedIndex)
{
case 0:
Application.Current.Resources = _defaultTheme;
break;
case 1:
Application.Current.Resources = _lunaTheme;
break;
case 2:
Application.Current.Resources = _xBoxTheme;
break;
case 3:
Application.Current.Resources = _toonsTheme;
break;
}
}
}
}'WPF' 카테고리의 다른 글
| Microsoft Silverlight Media Framework (0) | 2010.07.08 |
|---|---|
| [CollectionViewSource] DataGird 사용하기 (0) | 2010.07.07 |
| [Event/Property/Triggers]컨트롤 포커스 받았을때 스타일변경 (0) | 2010.07.01 |
| [DataContext] 간단한 DataContext 바인딩 (0) | 2010.06.28 |
| [Drag and Drop Objects] 개체 드래그 하기 (0) | 2010.06.23 |
| [Resource]Width/Height 치수를 리소스로 설정 (0) | 2010.06.22 |
| [DesignHeight/DesignWidth] 디자인 타임에 크기설정 (0) | 2010.06.17 |
| [Silverlight 4 Documentation/Tools] 도움말다운로드/툴킷 (0) | 2010.06.17 |
| [Brush]초간단 브러시 리소스 만들기 (0) | 2010.06.16 |
| [WPF Documentation Samples] 기본 예제 (1) | 2010.06.16 |