首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单击DataColumn时更改DataGridTemplateColumn

单击DataColumn时更改DataGridTemplateColumn
EN

Stack Overflow用户
提问于 2020-08-18 02:58:31
回答 1查看 41关注 0票数 0

在我的WPF文档中,我有一个DataGrid

代码语言:javascript
复制
<DataGrid>
    <DataGrid.ColumnHeaderStyle >
        <Style BasedOn="{StaticResource MaterialDesignDataGridColumnHeader}" TargetType="{x:Type DataGridColumnHeader}">
            <Setter Property="FontSize" Value="11"/>
            <Setter Property="HorizontalAlignment" Value="Center"/>
            <Setter Property="HorizontalContentAlignment" Value="Center"/>
        </Style>
    </DataGrid.ColumnHeaderStyle>
    <DataGrid.RowStyle>
        <Style BasedOn="{StaticResource MaterialDesignDataGridRow}" TargetType="{x:Type DataGridRow}">
            <Style.Triggers>
                <Trigger Property="DataGridCell.IsSelected" Value="True">
                    <Setter Property="Background" Value="Blue" />
                    <Setter Property="BorderBrush" Value="Blue" />
                </Trigger>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" Value="Blue" />
                </Trigger>
                <Trigger Property="IsMouseOver" Value="False">
                    <Setter Property="Background" Value="Red" />
                </Trigger>
            </Style.Triggers>
            <Setter Property="ContextMenu" Value="{StaticResource TasksMenu}"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type DataGridRow}">
                        <Border x:Name="DGR_Border" BorderBrush="Transparent" BorderThickness="0" Margin="0,15,0,0" Background="{TemplateBinding Background}" SnapsToDevicePixels="True" Height="50" CornerRadius="10">
                            <Grid Height="auto" Width="auto">
                                <SelectiveScrollingGrid>
                                    <SelectiveScrollingGrid.ColumnDefinitions>
                                        <ColumnDefinition Width="Auto"/>
                                        <ColumnDefinition Width="*"/>
                                    </SelectiveScrollingGrid.ColumnDefinitions>
                                    <SelectiveScrollingGrid.RowDefinitions>
                                        <RowDefinition Height="*"/>
                                        <RowDefinition Height="Auto"/>
                                    </SelectiveScrollingGrid.RowDefinitions>
                                    <DataGridCellsPresenter Grid.Column="1" ItemsPanel="{TemplateBinding ItemsPanel}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" FontSize="5"/>
                                    <DataGridDetailsPresenter Grid.Column="1" Grid.Row="1" SelectiveScrollingGrid.SelectiveScrollingOrientation="{Binding AreRowDetailsFrozen, ConverterParameter={x:Static SelectiveScrollingOrientation.Vertical}, Converter={x:Static DataGrid.RowDetailsScrollingConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" Visibility="{TemplateBinding DetailsVisibility}"/>
                                    <DataGridRowHeader Grid.RowSpan="2" SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical" FontSize="5" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Row}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
                                </SelectiveScrollingGrid>
                            </Grid>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </DataGrid.RowStyle>
    <DataGrid.Columns>
        <DataGridTemplateColumn x:Name="THISISTHECOLUMN" Width="*" MaxWidth="60">
            <DataGridTemplateColumn.HeaderStyle>
                <Style BasedOn="{StaticResource MaterialDesignDataGridColumnHeader}" TargetType="{x:Type DataGridColumnHeader}">
                    <Setter Property="HorizontalAlignment" Value="Left" />
                    <Setter Property="FontSize" Value="11"/>
                </Style>
            </DataGridTemplateColumn.HeaderStyle>
            <DataGridTemplateColumn.CellStyle>
                <Style TargetType="{x:Type DataGridCell}">
                    <Style.Triggers>
                        <Trigger Property="DataGridCell.IsSelected" Value="True">
                            <Setter Property="Background" Value="Red" />
                            <Setter Property="BorderBrush" Value="Red" />
                        </Trigger>
                    </Style.Triggers>
                    <Setter Property="Padding" Value="20"/>
                    <!--<Setter Property="Height" Value="57"/>-->
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="DataGridCell">
                                <Border Margin="2" BorderThickness="2" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" CornerRadius="5">
                                    <ContentPresenter />
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                    <!--<Setter Property="BorderBrush"><Setter.Value><MultiBinding><MultiBinding.Converter><local:CellForegroundMultiValueConverter /></MultiBinding.Converter><Binding RelativeSource="{RelativeSource Self}" Path="Column.Header"/><Binding/><Binding Path="HasChanges" /></MultiBinding></Setter.Value></Setter>-->
                </Style>
            </DataGridTemplateColumn.CellStyle>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Border Background="Blue" Height="40" CornerRadius="10" BorderBrush="Transparent">
                        <TextBlock Margin="5 0" FontSize="15" Width="auto" Text="1" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="Yellow"/>
                    </Border>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTextColumn Header="Header 1" Binding="{Binding Header1, UpdateSourceTrigger=PropertyChanged}">
            <DataGridTextColumn.ElementStyle>
                <Style TargetType="TextBlock">
                    <Setter Property="FontSize" Value="8" />
                </Style>
            </DataGridTextColumn.ElementStyle>
        </DataGridTextColumn>
        <DataGridTextColumn Header="Header 2" Binding="{Binding Header2, UpdateSourceTrigger=PropertyChanged}">
            <DataGridTextColumn.ElementStyle>
                <Style TargetType="TextBlock">
                    <Setter Property="FontSize" Value="8" />
                </Style>
            </DataGridTextColumn.ElementStyle>
        </DataGridTextColumn>
        <DataGridTextColumn Header="Header 3" Binding="{Binding Header3, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
            <DataGridTextColumn.ElementStyle>
                <Style TargetType="TextBlock">
                    <Setter Property="FontSize" Value="8" />
                </Style>
            </DataGridTextColumn.ElementStyle>
        </DataGridTextColumn>
    </DataGrid.Columns>
    <DataGrid.CellStyle>
        <Style TargetType="{x:Type DataGridCell}">
            <Style.Triggers>
                <Trigger Property="DataGridCell.IsSelected" Value="True">
                    <Setter Property="Background" Value="Blue" />
                    <Setter Property="BorderBrush" Value="Blue" />
                </Trigger>
            </Style.Triggers>
            <Setter Property="BorderThickness" Value="0"/>
            <Setter Property="Padding" Value="20"/>
            <Setter Property="FontSize" Value="9"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type DataGridCell}">
                        <Border Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                            <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Setter Property="Foreground">
                <Setter.Value>
                    <MultiBinding>
                        <MultiBinding.Converter>
                            <local:CellForegroundMultiValueConverter />
                        </MultiBinding.Converter>
                        <Binding RelativeSource="{RelativeSource Self}" Path="Column.Header"/>
                        <Binding/>
                        <Binding Path="HasChanges" />
                    </MultiBinding>
                </Setter.Value>
            </Setter>
        </Style>
    </DataGrid.CellStyle>
</DataGrid>

在按钮悬停时,DataGridColumn完全按照预期从红色变为蓝色,但当我单击它时,第一个DataGridTemplateColumn (标记为THISISTHECOLUMN)不会改变颜色。我如何才能使它在主DataGridColumn被单击时也会改变颜色?

到目前为止它看起来是这样的:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-18 18:28:50

DataGridRow样式添加触发器,以将选定内容的DGR_Border边框颜色更改为Blue

代码语言:javascript
复制
<Style BasedOn="{StaticResource MaterialDesignDataGridRow}" TargetType="{x:Type DataGridRow}">
   <Style.Triggers>
      <!-- ...your other triggers. -->
      <Trigger Property="IsSelected" Value="True">
         <Setter Property="Background" Value="Blue" />
      </Trigger>
   </Style.Triggers>
   <!-- ...rest of the style. -->
</Style>

更改DataGridCell触发器以设置Blue BackgroundBorderBrush,而不是Red

代码语言:javascript
复制
<Style TargetType="{x:Type DataGridCell}">
   <Style.Triggers>
      <Trigger Property="DataGridCell.IsSelected" Value="True">
         <Setter Property="Background" Value="Blue" />
         <Setter Property="BorderBrush" Value="Blue" />
      </Trigger>
   </Style.Triggers>
   <!-- ...your other setters. -->
</Style>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63457047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档