0

可視性の順序に基づいて、DataGridの長方形の色を変更する必要があります。たとえば、5行あり、3行目の長方形が初めて表示される場合は、緑色で塗りつぶす必要があります。次に表示される長方形は赤になり、以下同様に続きます。

これが私のコードです:

                    <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Rectangle x:Name="colorBox" Height="15" Width="15"  Stroke="#9C9C9C" 
                                           Visibility="{Binding Path=IsDisplayable, 
                                                                Converter={StaticResource BoolVisibilityConverter}}">
                            <Rectangle.Style>
                                <Style TargetType="{x:Type Rectangle}">
                                    <Style.Triggers>
                                        <Trigger Property="Visibility" Value="Visible">
                                            <Setter Property="Fill" Value="{Binding Path=FillColor}" />
                                        </Trigger>
                                    </Style.Triggers>
                                </Style>
                            </Rectangle.Style>
                        </Rectangle>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>

私はこのコードを書きましたが、機能していません。論理的には間違いないようですが、実際には長方形の可視性が変化したときにこのトリガーが呼び出されることはないと思います。この問題の良い解決策を教えてください。ありがとう

IsDisplayableプロパティはここで更新されます:

<DataGridTemplateColumn x:Name="CheckboxColumnHeader" 
                                Header="{Binding Source={x:Reference Name=treeView}, Path=DataContext.CheckboxColumnHeader}"
                                IsReadOnly="True" >
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox x:Name="displayedObjects" IsChecked="{Binding IsDisplayable, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
                        </CheckBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn.CellStyle>
                    <Style TargetType="{x:Type DataGridCell}" BasedOn="{StaticResource {x:Type DataGridCell}}">
                        <Setter Property="HorizontalContentAlignment" Value="Center" />
                    </Style>
                </DataGridTemplateColumn.CellStyle>
            </DataGridTemplateColumn>

そして最後に、コードビハインドは次のとおりです。

public bool IsDisplayable
    {
        get
        {
            return this.isDisplayable;
        }
        set
        {
            if (this.isDisplayable!= value)
            {
                this.isDisplayable= value;
                //NotifyOfPropertyChange(() => this.isDisplayable);
                Action notify = () => NotifyOfPropertyChange(() => this.isDisplayable);
                Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, notify);
            }
        }
    }

    public Brush FillColor
    {
        get
        {
            return signalColors[currentColorIndex];
        }
        set
        {
        }
    }
4

1 に答える 1

0

トリガーを完全に取り除くことができます...

      <DataGridTemplateColumn.CellTemplate>
             <DataTemplate>
                <Rectangle x:Name="colorBox" Height="15" width="15"
                           Fill="{Binding Path=FillColor}"
                           Visibility="{Binding Path=IsDisplayable, 
                                 Converter={StaticResource BoolVisibilityConverter}}"
                 />
             </DataTemplate>
      </DataGridTemplateColumn.CellTemplate>

プロパティFillColorがタイプBrushではなくColor! Color型なら当てはまColorToBrushConverter...

これは、 CodePlexのExtended Toolkitにあります ...

    <Window .... 
          xmlns:Toolkit="clr-namespace:Microsoft.Windows.Controls.Core.Converters; assembly=WPFToolkit.Extended"
          ...>
          <DataGrid ...>
               ....

               <DataGridTemplateColumn.CellTemplate>
                  <DataTemplate>
                     <DataTemplate.Resources>
                          <Toolkit:ColorToSolidColorBrushConverter 
                             x:Key="colorToSolidBrushConverter" /> 
                     <DataTemplate.Resources> 
                     <Rectangle x:Name="colorBox" Height="15" width="15"
                           Fill="{Binding Path=FillColor, 
                                Converter={StaticResource colorToSolidBrushConverter}}"
                           Visibility="{Binding Path=IsDisplayable, 
                                 Converter={StaticResource BoolVisibilityConverter}}"
                      />
                 </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                ....
          </DataGrid>
   </Window> 
于 2012-08-08T13:34:25.737 に答える