2013-03-30 33 views
0

我想改變我在運行時網格的顏色改變我的項目模板的顏色和我展示在MainPage.xaml在GridView控件這個項目模板......在這裏,我已經嘗試了它 該項目模板在StandardStyle.xaml ...如何在運行時

<DataTemplate x:Key="Standard250x250ItemTemplate"> 
    <Grid Name="grid1" HorizontalAlignment="Left" Width="370" Height="200"> 

     <Grid.ColumnDefinitions> 
       <ColumnDefinition></ColumnDefinition> 
       <ColumnDefinition></ColumnDefinition> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="40"></RowDefinition> 
      <RowDefinition ></RowDefinition> 
     </Grid.RowDefinitions> 

     <Border Grid.ColumnSpan="2" Grid.Row="0" Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}" Height="30"> 
      <!--<Image Source="{Binding Image}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/>--> 
      <TextBlock Text="{Binding ProjectName}" FontSize="20" Foreground="#FFCBD3D4" Style="{StaticResource TitleTextStyle}" TextAlignment="Center"/> 
     </Border> 
     <StackPanel Name="spname" Width="Auto" Grid.Column="0" Grid.Row="1" Orientation="Vertical" Background="{StaticResource ListViewItemOverlayBackgroundThemeBrush}" VerticalAlignment="Stretch"> 
      <TextBlock Text=" Project Code " FontSize="25" TextWrapping="NoWrap" Foreground="{StaticResource ListViewItemOverlaySecondaryForegroundThemeBrush}" Height="50" Width="200" TextAlignment="Left" /> 
      <TextBlock Text=" ProjectManager" FontSize="25" TextWrapping="NoWrap" Foreground="{StaticResource ListViewItemOverlaySecondaryForegroundThemeBrush}" Height="50" Width="200" TextAlignment="Left" /> 
      <TextBlock Text=" Project Status " FontSize="25" TextWrapping="NoWrap" Foreground="{StaticResource ListViewItemOverlaySecondaryForegroundThemeBrush}" Height="50" Width="200" TextAlignment="Left" /> 
     </StackPanel> 
     <StackPanel Name="sp1" Width="200" Orientation="Vertical" Grid.Column="1" Grid.Row="1" Background="{StaticResource ListViewItemOverlayBackgroundThemeBrush}"> 
      <TextBlock Text="{Binding ProjectCode}" FontSize="25" TextWrapping="NoWrap" Foreground="{StaticResource ListViewItemOverlaySecondaryForegroundThemeBrush}" Height="50" TextAlignment="Center" /> 
      <TextBlock Text="{Binding ProjectManagerName}" FontSize="25" TextWrapping="NoWrap" Foreground="{StaticResource ListViewItemOverlaySecondaryForegroundThemeBrush}" Height="50" TextAlignment="Center" /> 
      <TextBlock x:Name="statusblock" Text="{Binding ProjectStatus}" FontSize="25" TextWrapping="NoWrap" Foreground="{StaticResource ListViewItemOverlaySecondaryForegroundThemeBrush}" Height="50" TextAlignment="Center" /> 
     </StackPanel> 
     <VisualStateManager.VisualStateGroups> 
      <VisualStateGroup x:Name="CommonStates"> 
       <VisualStateGroup.Transitions> 
        <VisualTransition From="Normal" To="Colored" GeneratedDuration="00:00:01"></VisualTransition> 
       </VisualStateGroup.Transitions> 
       <VisualState x:Name="Normal"/> 
       <VisualState x:Name="Colored"> 
        <Storyboard> 
         <ColorAnimation Storyboard.TargetName="grid1" Storyboard.TargetProperty="Background" To="Red" > 
       </ColorAnimation> 
        </Storyboard> 
       </VisualState> 
      </VisualStateGroup> 
     </VisualStateManager.VisualStateGroups> 
    </Grid> 
</DataTemplate> 

回答

0

使用MVVM,我會結合網格顏色在視圖模型的屬性,那麼你就可以在通過「代碼」任何時候改變顏色:

private System.Windows.Media.Brush _foregroundColor = System.Windows.Media.Brushes.DarkSeaGreen; 

    public System.Windows.Media.Brush ForegroundColor 
    { 
     get { return _foregroundColor; } 
     set 
     { 
      _foregroundColor = value; 
      OnPropertyChanged("ForegroundColor"); 
     } 
    } 

確保執行iNotifyPropertyChanged以通知UI的更改

這裏是XAML

<Grid Background="{Binding Path=ForegroundColor}" /> 
0

如果你想要基於some property改變Grid color你有view-model
你也可以做這樣的事情......

<DataTemplate> 
    ... 
    <DataTemplate.Triggers> 
     <DataTrigger Binding="{Binding Path=Status}" Value="Error"> 
      <Setter Property="Background" Value="Red" TargetName="grid1" /> 
     </DataTrigger> 
    </DataTemplate.Triggers> 
</DataTemplate> 

就個人而言,我總是綁定到'地位'類的財產。
,然後使用data trigger或直接綁定像<Grid Foreground="{Binding Status, Converter=statusToColor}" />和使用轉換器來「翻譯」。

(我不知道,如果你某種動畫後,實際上是或者是,只是一個試錯?)