2013-03-30 4 views
0

Я хочу изменить цвет моей сетки во время выполнения, и я показываю этот шаблон элемента в gridview в mainpage.xaml ... здесь я пробовал для него Этот шаблон элемента является в 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, я бы привязать цвет сетки к свойству в ViewModel, то вы можете изменить цвет в любое время через «код»:

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, чтобы уведомить пользовательский интерфейс об изменениях

здесь является XAML

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

Если вы хотите изменить Grid color на основе some property вы имеете в 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}" /> и используйте конвертер для перевода.

(я не уверен, что если вы на самом деле после того, как какой-то анимации или это было просто испытание ошибок?)

Смежные вопросы