0

考慮下面的代碼,其中一個單元格的顏色的變化取決於什麼(屬性剝離爲簡潔起見):如何防止在XAML中過度嵌套標籤?

<UserControl> 
    <Grid> 
     <ListView> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <TextBlock> 
            <TextBlock.Style> 
             <Style> 
              <Style.Triggers> 
               <Trigger> 
                <Setter> 
                 <Setter.Value> 
                  <LinearGradientBrush> 
                   <GradientStop/> 
                  </LinearGradientBrush> 
                 </Setter.Value> 
                </Setter> 
               </Trigger> 
              </Style.Triggers> 
             </Style> 
            </TextBlock.Style> 
           </TextBlock> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
       </GridView> 
      </ListView.View> 
     </ListView> 
    </Grid> 
</UserControl> 

是否有在XAML任何先進的技術,超越減少凹槽從4比2,並​​試圖推儘可能多東西,因爲我可以進入頂級(在這種情況下UserControl的)資源字典?

PS:我堅持用VS 2008

+0

把'DataTemplate'作爲'Resource'在'UserControl.Resources',然後'' –

+0

你可以做的一件簡單的事情就是將'DataTemplate'聲明爲資源,然後使用'{StaticResource}'標記擴展名來引用它。 – dlev

回答

1

。利用資源,以簡化您的XAML。它也使得更好的重用和組織。例如,與上述XAML你可以仔細分解成以下:

<UserControl> 
    <UserControl.Resources> 

     <LinearGradientBrush x:Key="MyBrush"> 
      <GradientStop/> 
     </LinearGradientBrush> 

     <Style x:Key="ItemTextBlockStyle" TargetType="{x:Type TextBlock}"> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter Property="Background" Value="{DynamicResource MyBrush}"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 

     <DataTemplate x:Key="ItemTemplate"> 
      <TextBlock Style="{DynamicResource ItemTextBlockStyle}"/> 
     </DataTemplate> 

     <Style x:Key="MyListViewStyle" TargetType="{x:Type ListView}"> 
      <Setter Property="View"> 
      <Setter.Value> 
       <GridView> 
        <GridViewColumn CellTemplate="{DynamicResource ItemTemplate}"/> 
       </GridView> 
      </Setter.Value> 
      </Setter> 
     </Style> 
     </UserControl.Resources> 

    <Grid> 
     <ListView Style="{DynamicResource MyListViewStyle}"/> 
    </Grid> 
</UserControl>