2017-09-05 113 views
0

私は完全に有効なセル(一部のセルにはドロップダウン、テキストボックス、チェックボックスがあります)と組み合わせてセルを無効にしたデータグリッドコントロールがあります。問題は、無効にされたセルのスタイルが、有効なセルとまったく同じに見えることです。私は単に無効になっているすべてのセルのスタイルを変更したいので、ユーザーがデータを変更できないことは明らかです。DataGrid WPFの無効なセルの背景色を変更

<DataGrid Name="DataGrid" 
    ItemsSource="{Binding MySource}" 
    AutoGenerateColumns="False" Grid.Row="1" 
    BorderThickness="0" 
    SelectionMode="Single" SelectionUnit="FullRow" 
    CanUserAddRows="False" CanUserDeleteRows="False" 
    CanUserReorderColumns="False" CanUserSortColumns="False" 
    CanUserResizeColumns="False" CanUserResizeRows="False" 
    BeginningEdit="DataGrid_BeginningEdit" Margin="10"> 
    <DataGrid.Resources> 
     <CollectionViewSource Source="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.SourceList}" x:Key="SourceChoices" /> 
      <CollectionViewSource Source="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.MyDropDownSource}" x:Key="MyDropDownOptions" /> 
      <CollectionViewSource Source="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.MySource}" x:Key="MySourceOptions" /> 
       <Style TargetType="DataGrid"> 
        <Setter Property="GridLinesVisibility" Value="All" /> 
        <Setter Property="HorizontalGridLinesBrush" Value="Gray"/> 
        <Setter Property="VerticalGridLinesBrush" Value="LightGray"/> 
        <Setter Property="FontSize" Value="13" /> 
       </Style> 
       <Style TargetType="DataGridColumnHeader"> 
        <Setter Property="Background" Value="LightGray" /> 
        <Setter Property="Foreground" Value="Black" /> 
        <Setter Property="FontSize" Value="13" /> 
        <Setter Property="FontWeight" Value="DemiBold" /> 
        <Setter Property="HorizontalContentAlignment" Value="Center" /> 
        <Setter Property="Height" Value="34" /> 
       </Style> 
       <Style TargetType="DataGridCell"> 
        <Setter Property="Height" Value="35" /> 
        <Setter Property="Padding" Value="4" /> 
        <Setter Property="BorderThickness" Value="0" /> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="{x:Type DataGridCell}"> 
           <Grid Background="{TemplateBinding Background}"> 
            <ContentPresenter VerticalAlignment="Center" /> 
           </Grid> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
        <EventSetter Event="PreviewMouseLeftButtonDown" Handler="DataGridCell_PreviewMouseLeftButtonDown"/> 
        <Style.Triggers> 
         <Trigger Property="DataGridCell.IsSelected" Value="True"> 
          <Setter Property="Background" Value="LightBlue" /> 
          <Setter Property="Foreground" Value="Black" /> 
         </Trigger> 
         <Trigger Property="IsEnabled" Value="False"> 
          <Setter Property="Background" Value="Pink" /> 
          <Setter Property="Foreground" Value="Blue" /> 
         </Trigger> 
        </Style.Triggers> 
       </Style> 
       <Style TargetType="DataGridRow"> 
        <Setter Property="Background" Value="White" /> 
        <Setter Property="BorderThickness" Value="0" /> 
        <Setter Property="Width" Value="Auto" /> 
       </Style> 
      </DataGrid.Resources> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="Pos" Binding="{Binding Position}" Width="40" CanUserSort="False" /> 
       <DataGridTextColumn Header="Acn Nbr" Binding="{Binding MySourceNumber1}" Width="10*" CanUserSort="False" /> 
       <DataGridTextColumn Header="Name" Binding="{Binding MySourceNumber2}" Width="15*" CanUserSort="False" /> 
       <DataGridTextColumn Header="Org #" Binding="{Binding MySourceNumber3}" Width="40" CanUserSort="False" /> 
       <DataGridCheckBoxColumn Header="Proteus" Binding="{Binding MySourceNumber4}" Width="50" CanUserSort="False" /> 
       <DataGridComboBoxColumn Header="Source Id" TextBinding="{Binding MySourceNumber5}" Width="10*" CanUserSort="False" 
              DisplayMemberPath="Name" SelectedValuePath="ID" ItemsSource="{Binding Source={StaticResource Options}}"/> 
       <DataGridComboBoxColumn Header="Bench" SelectedValueBinding="{Binding ID}" Width="10*" CanUserSort="False" 
              DisplayMemberPath="Name" SelectedValuePath="ID" ItemsSource="{Binding Source={StaticResource Options}}"/> 
       <DataGridComboBoxColumn Header="Org Id" SelectedValueBinding="{Binding ID}" Width="10*" CanUserSort="False" 
              DisplayMemberPath="OrganismAbbrev" SelectedValuePath="ID" ItemsSource="{Binding Source={StaticResource Options}}"/> 
       <DataGridTextColumn Header="Comment" Binding="{Binding Comment}" Width="20*" CanUserSort="False" /> 
      </DataGrid.Columns> 
     </DataGrid> 

注読み取るコードで一部:

<Trigger Property="DataGridCell.IsSelected" Value="True"> 
    <Setter Property="Background" Value="LightBlue" /> 
    <Setter Property="Foreground" Value="Black" /> 
</Trigger> 

この私のために働いていないここに私のXAMLコードです。私は間違って何をしていますか?

ありがとうございました!

+0

トリガをDataGridRowスタイルに移動しました。サイコロはありません。 –

+0

申し訳ありませんが、私は "これは私のために働いていません"と言う部分を見ていましたが、それからもう一度全体の質問を読みました。それで、機能していないのは、無効にされた細胞がピンクの背景を持つべきであるということですね。 –

+0

特定のセルを無効にする別のトリガーを設定するだけで、ピンクの背景が得られます。どのように細胞を無効にしていますか? –

答えて

1

ControlTemplate内にトリガーを配置できます。トリガーで参照されているプロパティ(この場合は "IsEnabled"または "IsSelected")は、そのデータのプロパティがあると仮定して、TargetTypeのプロパティ(この場合はDataGridCell)を指します。タイプすると動作します。さもなければ、バインディングは壊れます。

<Setter Property="Template"> 
     <Setter.Value> 
       <ControlTemplate TargetType="{x:Type DataGridCell}"> 
        <Grid Background="{TemplateBinding Background}"> 
        <ContentPresenter VerticalAlignment="Center" /> 
        </Grid> 
       <ControlTemplate.Triggers> 
       <Trigger Property="IsSelected" Value="True"> 
         <Setter Property="Background" Value="LightBlue" /> 
         <Setter Property="Foreground" Value="Black" /> 
        </Trigger> 
        <Trigger Property="IsEnabled" Value="False"> 
         <Setter Property="Background" Value="Pink" /> 
         <Setter Property="Foreground" Value="Blue" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
+0

これはトリックでした!おかげさまで@baye dbest –

関連する問題