퇴근5분전

- 리소스
동적 리소스, 정적리소스로 구분되며 이는 런타임시 리소스의 내용이 변하는지에 대한 차이임.
Key와 Data를 저장하는 컬렉션이다.



정적 리소스 선언
  <Window ... >
      <Window.Resources>
           <SolidColorBrush x:Key="YellowBrush" Color="Yellow" />
      </Window.Resources>

        <Button Background="{StaticResource YellowBrush}" />
 </Window>
<Window.Resources>는 <컨트롤.Resource> 지정이 가능함.
StaticResource 키워드를 이용해 Key에 대한 값을 리소스컬렉션에서 찾아 적용한다.
{} 는 "" 안에 값을 값으로 인식하지 말고 해석하라는 의미임.

동적 리소스 선언
window.xaml
  <Window ... >
        <Button Background="{DynamicResource Window.Background}" Click="button1_Click" />
 </Window>

window.xaml.cs
  private void button1_Click(object sender, RoutedEventArgs e)
  {
        this.Background = Brushes.AliceBlue;                
  }
동적으로 리소스가 변경됨을 볼수 있음.


리소스만을 임의의 파일로 관리하는 방법
새항목 추가 시 : 리소스사전 항목 선택 후 생성

Dictionary1.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <SolidColorBrush x:Key="YellowBrush" Color="Yellow" />
       ...사용할 리소스 등록...

</ResourceDictionary>

UserControl.xaml
<UserControl x:Class="WpfApplication1.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300">
    <UserControl.Resources>
        <ResourceDictionary Source="Dictionary1.xaml" ></ResourceDictionary>
    </UserControl.Resources>
    <Grid>
        <Button Margin="31,28,47,50" Name="button1" Click="button1_Click" Background="{StaticResource YellowBrush}">Button</Button>
        <Button Height="44" Margin="68,59,90,0" Name="button2" VerticalAlignment="Top" Click="button2_Click">Button</Button>
    </Grid>
</UserControl>


리소스 범위
 xml기반의 마크업으로 부모요소안에 자식요소들은 부모요소가 지니는 특징을 모두 갖게 된다.
리소스를 찾을때는 자식부터 상위계층으로 필요한 리소스요소가 있는지 찾아가게 됨.
 파일로 관리시 특정 리소스에 종속적으로 선언된것이 아니므로 모든 컨트롤에서는 리소스 사전에 등록된 리소스를 찾아 적용가능함.


프로그래밍상으로 리소스를 등록 & 찾는 방법
등록
  Resource.Add("YellowBrush" , Brushes.Yellow );
  Resource["YellowBrush"] = Brushes.Yellow;
검색
  적용컨트롤.Background = (Brush)컨트롤.FindResource("YellowBrush" );


어셈블리로 리소스관리하기
   이건 책에 p191 에 자세히 나와있으니 책 참조!



- 출처 : .Net 3.5 차세대 개발 프로그래밍 -  책에서 일부 정리 함. ( 저작권 문제시 삭제 할 것임. )
          자세한 내용은 책을 통해 확인하시길...




'# 3) .Net ( Vs 2008 ) > WPF' 카테고리의 다른 글

컨트롤  (0) 2009.12.28
스타일  (0) 2009.12.26
레이아웃 컨트롤  (0) 2009.12.26
유저컨트롤사용!  (0) 2009.12.26
WPF 응용프로그램 기초  (0) 2009.12.26