2009-04-08 2 views
2

WPF 응용 프로그램을 만들 때 매우 빠르게 XAML이 부풀리기 시작합니다.XAML을 스타일에 적용하기위한 전략은 무엇입니까?

그 다음 은 HTML/CSS 방식에서 XAML/스타일 문제에 접근하여 반복 코드를 찾고이를 Window.Resources 섹션에 넣은 스타일로 채 웁니다.

다른 사람들이이 방법을 사용하고 있습니까? 아니면 XAML에서 더 좋은 방법이 있습니까? 그냥 아래의 두 블록은 두 개의 작은 단어로 차이가있는 것 같습니다. 기능적 사용자 컨트롤 (여기는 왼쪽 메뉴 임)에 넣을 수 있으므로 내 메뉴에 25 개의 요소가있을 때 이름과 클릭 타겟과 같은 25 행만 가질 수 있습니다.

또는 MVVM으로 이동하면이 문제가 DataBinding (자체적으로 하드 코딩 된 프로토 타입 임)으로 처리되므로 내 메뉴 항목의 이름을 내 컬렉션에 유지할 수 있습니다. ViewModel 그리고 ItemsControl에 메뉴를 동적으로 생성합니까?

은 부풀린 XAML 파일로 WP30 응용 프로그램의 실제 내용은입니까?

WPF 응용 프로그램을 만들 때 어떤 종류의 XAML 스타일 전략이 있습니까?

Window.Resources (파일 상단) :

<Window.Resources> 
    <Style x:Key="Link" TargetType="Button"> 
     <Setter Property="Cursor" Value="Hand"/> 
     <Setter Property="Foreground" Value="#555"/> 
     <Setter Property="Background" Value="Transparent"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Button"> 
        <TextBlock TextDecorations="Underline" 
       Text="{TemplateBinding Content}" 
       Background="{TemplateBinding Background}"/> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsPressed" Value="True"> 
          <Setter Property="Foreground" Value="Red"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 

현재 XAML : 간단한

<Expander HorizontalAlignment="Left" Header="File" VerticalAlignment="Top" ExpandDirection="Down" Width="200" Padding="2"> 
    <Expander.Background> 
     <LinearGradientBrush> 
      <GradientStop Color="#bbb" Offset="0"/> 
      <GradientStop Color="#ccc" Offset="1"/> 
     </LinearGradientBrush> 
    </Expander.Background> 
    <Border CornerRadius="5"> 
     <Border.Background> 
      <LinearGradientBrush> 
       <GradientStop Color="#ccc" Offset="0"/> 
       <GradientStop Color="#bbb" Offset="1"/> 
      </LinearGradientBrush> 
     </Border.Background> 
     <StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Top"> 
      <Button Click="buttonClose_Click" 
       Style="{StaticResource Link}" 
       Margin="10 3 3 3" 
       Content="Close"> 
      </Button> 
     </StackPanel> 
    </Border> 
</Expander> 

<Expander HorizontalAlignment="Left" Header="Customers" VerticalAlignment="Top" ExpandDirection="Down" Width="200" Padding="2"> 
    <Expander.Background> 
     <LinearGradientBrush> 
      <GradientStop Color="#bbb" Offset="0"/> 
      <GradientStop Color="#ccc" Offset="1"/> 
     </LinearGradientBrush> 
    </Expander.Background> 
    <Border CornerRadius="5"> 
     <Border.Background> 
      <LinearGradientBrush> 
       <GradientStop Color="#ccc" Offset="0"/> 
       <GradientStop Color="#bbb" Offset="1"/> 
      </LinearGradientBrush> 
     </Border.Background> 
     <StackPanel HorizontalAlignment="Left" VerticalAlignment="Top"> 
      <Button Click="btnAppPage_Click" 
       Tag="CustomerAdd" 
       Style="{StaticResource Link}" 
       Margin="10 3 3 3" 
       Content="Create Customer"/> 
     </StackPanel> 
    </Border> 
</Expander> 

답변

1

: 반복을 파악하고 제어로 이동합니다. 컨트롤은 런타임에 필요한 변형을 구성하는 데 필요한 모든 속성을 가질 수 있습니다. 그리고 그것은 통제의 미덕으로 다시 템플리트 될 수 있습니다.

+0

저는 UserControls를 사용하여 페이지의 왼쪽에있는 메뉴가 usercontrol이지만 페이지의 내용을 조금씩 반복해서 표시하지는 않지만 여기에 설명 된대로 사용자 정의 컨트롤을 의미합니까? http : //msdn.microsoft.com/en-us/magazine/cc163421.aspx –

0

또한 반복을 식별하여 리소스로 이동할 수 있습니다. 한 자원이 다른 자원을 쉽게 참조 할 수 있습니다.

관련 문제