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>
4

2 に答える 2

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");
        }
    }

UI に変更を通知する iNotifyPropertyChanged を必ず実装してください。

ここにxamlがあります

 <Grid Background="{Binding Path=ForegroundColor}" />
于 2013-03-30T15:33:27.750 に答える
0

あなたが持っているものにGrid color基づいて変更したい場合は、 次のようなこともできます... some propertyview-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}" />、コンバーターを使用して「翻訳」します。

(あなたが実際にある種のアニメーションを求めているのか、それとも単なる試行錯誤なのかはわかりません。)

于 2013-03-30T17:05:08.567 に答える