【发布时间】:2017-11-22 09:28:18
【问题描述】:
我有这个 DataGridRow 模板(已简化):
<Style TargetType="{x:Type DataGridRow}" x:Key="DataGridRowStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridRow}">
<Grid>
<Border x:Name="OverlayBorder" Opacity="0.08">
<Border.Background>
<LinearGradientBrush EndPoint="0,0" StartPoint="10,10"
MappingMode="Absolute" SpreadMethod="Repeat">
<GradientStop Color="{Binding EntityState, Converter={resources:EntityStateToColorConverter}}" Offset="0" />
<GradientStop Color="{Binding EntityState, Converter={resources:EntityStateToColorConverter}}" Offset="0.4" />
<GradientStop Color="Transparent" Offset="0.4" />
<GradientStop Color="Transparent" Offset="1" />
</LinearGradientBrush>
</Border.Background>
</Border>
<Border x:Name="DGR_Border"
Background="{TemplateBinding Background}">
<DataGridCellsPresenter />
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{DynamicResource DataGridRowBackgroundHover}" />
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{StaticResource DataGridRowBackgroundSelected}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我还有一些课:
public class EntityWithState
{
public EntityStateEnum EntityState { get; set; }
}
模板适用于类EntityWithState。看看这一行
<GradientStop Color="{Binding EntityState, Converter={resources:EntityStateToColorConverter}}" Offset="0" />
根据EntityWithState.EntityStateDataGridRow 设置渐变背景。
但如果我有其他课程:
public class EntityWithEntityWithState
{
public EntityWithState EntityWithState { get; set; }
}
我们的模板必须是:
<GradientStop Color="{Binding EntityWithState.EntityState, Converter={resources:EntityStateToColorConverter}}" Offset="0" />``
我的问题是如何为多个课程使用相同的模板? 我认为附加财产对我有帮助。例如:
<DataGrid UiExtensions:DataGrid.StatePropName="EntityWithState.EntityState">
...
</DataGrid>
但我不知道如何实现它。或者如果有其他解决方案...
更新(2017 年 11 月 22 日)
我可以使用
public class EntityWithEntityWithStateViewModel
{
public EntityWithEntityWithState EntityWithEntityWithState { get; set; }
public EntityStateEnum EntityState => EntityWithEntityWithState.EntityWithState.EntityState;
}
但我想在没有 ViewModel 访问权限的情况下执行此操作,仅使用 XAML 和 UI
更新 2 (23.11.2017)
换句话说,我需要 DisplayMemberPath 或 ComboBox 或 ListBox 之类的东西
【问题讨论】:
标签: wpf datagrid attached-properties