【问题标题】:Make WPF Trigger use any Property使 WPF 触发器使用任何属性
【发布时间】:2012-04-09 06:23:09
【问题描述】:

我使用Datagrid。在那我放了一个Area的列表:

ObservableCollection<Area> areas = new ObservableCollection<Area>();
...
datagrid.ItemsSource = areas;

现在我想根据Area 的属性设置行的样式。

<DataGrid.RowStyle>
   <Style TargetType="DataGridRow">
      <Style.Triggers>
         <!-- Compiler can't find UseForGroups -->
         <Trigger Property="Area.UseForGroups" Value="True">  
            <Setter Property="Background" Value="LightCoral"/>
            <Setter Property="Foreground" Value="Black"/>
         </Trigger>
      </Style.Triggers>
   </Style>
</DataGrid.RowStyle>

如何引用Area.UseForGroups

编辑

我用DataTriggers 尝试了以下操作,但没有任何反应

<DataGrid ...>
   <DataGrid.RowStyle>
      <Style TargetType="{x:Type DataGridRow}" >
         <Style.Triggers>
            <DataTrigger Binding="{Binding UseForGroups}" Value="True">
               <Setter Property="Background" Value="LightCoral"/>
               <Setter Property="Foreground" Value="Black"/>
            </DataTrigger>
         </Style.Triggers>
      </Style>
   </DataGrid.RowStyle>
</DataGrid>

【问题讨论】:

    标签: c# wpf properties datagrid styles


    【解决方案1】:

    这是一个使用 DataTrigger 的示例

    <Page.Resources>
        <Style x:Key="RowStyle" TargetType="{x:Type DataGridRow}" >
            <Style.Triggers>
                <DataTrigger Binding="{Binding UseForGroups}" Value="True">
                    <Setter Property="Background" Value="LightCoral"/>
                    <Setter Property="Foreground" Value="Black"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Page.Resources>
    
    
    <DataGrid RowStyle="{StaticResource RowStyle}" ...>
    

    请注意,您不应仅指定 'Area.UseForGroups' 仅指定 'UseForGroups',因为单个行的 DataContext 是一个 Area

    【讨论】:

    • 我们能看到Area类吗?是否有属性 UseForGroups,是否实现了 INotifyPropertyChanged?
    • 对不起 - 我的错误。没有正确设置属性。现在可以了。
    【解决方案2】:

    您是否尝试过使用DataTrigger

    编辑:

    常规的Trigger 响应依赖属性(通常是 GUI 属性)。

    DataTrigger 可以响应任何 .NET 属性(通过设置其 Binding 属性)。

    编辑 2:

    另外我认为使用DataTrigger 你不需要只指定Area.UseForGroups UseForGroups 因为你的绑定DataGridRow 已经是Area 类型了

    【讨论】:

      猜你喜欢
      • 2013-02-16
      • 2011-07-06
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      • 1970-01-01
      • 2016-11-13
      • 2010-12-20
      • 2016-01-13
      相关资源
      最近更新 更多