首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VisualStates在DataGridRow ControlTemplate中的应用

VisualStates在DataGridRow ControlTemplate中的应用
EN

Stack Overflow用户
提问于 2022-04-11 13:23:27
回答 1查看 62关注 0票数 0

我为一个DataGridRow创建了一个自定义样式,它也改变了我在Visual中获得的控件模板(右键单击控件并选择编辑模板的副本(对不起,我没有确切的翻译)。首先,我省略了整个VisualStateManager的内容,一切都很好。但是,当我想要有交替的行颜色时,我想我必须使用状态为“Normal_AlternatingRow”的VisualStateManager。不幸的是,一旦VisualStateManager没有注释,我就会收到这个错误:

“未知”属性不指向路径中的依赖对象“(0).(1).(2)”

这是我使用模板的DataGridRow风格:

代码语言:javascript
复制
<Style x:Key="DataGridRowStyle" TargetType="{x:Type DataGridRow}">
<Setter Property="HeaderStyle" Value="{StaticResource DataGridRowHeaderStyle}"/>
<Setter Property="Background" Value="{StaticResource ControlLightBackgroundBrush}"/>
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="Template">
  <Setter.Value>
    <ControlTemplate TargetType="{x:Type DataGridRow}">
      <Border x:Name="DGR_Border" BorderBrush="{TemplateBinding BorderBrush}" 
              BorderThickness="{TemplateBinding BorderThickness}" 
              Background="{TemplateBinding Background}" SnapsToDevicePixels="True"                  >
        <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}"/>
          <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" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Row}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
        </SelectiveScrollingGrid>
        <VisualStateManager.VisualStateGroups>
          <VisualStateGroup x:Name="CommonStates">
            <VisualState x:Name="Normal"/>
            <VisualState x:Name="Normal_AlternatingRow">
              <Storyboard>
                <ColorAnimationUsingKeyFrames Storyboard.TargetName="DGR_Border"
                                              Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[0].(GradientStop.Color)">
                  <EasingColorKeyFrame KeyTime="0" Value="Yellow"/>
                </ColorAnimationUsingKeyFrames>                   
              </Storyboard>
            </VisualState>
          </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>
      </Border>
    </ControlTemplate>
  </Setter.Value>
</Setter>
<Style.Triggers>
  <Trigger Property="IsNewItem" Value="True">
    <Setter Property="Margin" Value="{Binding NewItemMargin, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
  </Trigger>
  <Trigger Property="IsSelected" Value="True">
    <Setter Property="Background" Value="{StaticResource HighlightBrush}"/>
  </Trigger>
</Style.Triggers>

我以前从未在控制模板中使用过可视状态。

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-11 13:32:46

当前实现假定Background属性设置为GradientBrush

如果ControlLightBackgroundBrush是一个SolidColorBrush,那么以下内容应该可以工作:

代码语言:javascript
复制
<VisualState x:Name="Normal_AlternatingRow">
    <Storyboard>
        <ColorAnimationUsingKeyFrames Storyboard.TargetName="DGR_Border"
                                      Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)">
            <EasingColorKeyFrame KeyTime="0" Value="Yellow"/>
        </ColorAnimationUsingKeyFrames>
    </Storyboard>
</VisualState>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71828640

复制
相关文章

相似问题

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