WPF:这种 DataGridTextColumn 样式有什么问题?



我想使用 Thomas Levesque 通过附加属性的技巧为 DataGridTextColumn 创建一个参数化样式。但是,我无法使其适用于我的情况。

基本上,我想转换这个

                    <DataGridTextColumn Header="Today Chg $" Binding="{Binding TodaysValueChange, StringFormat=N2}" IsReadOnly="True">
                        <DataGridTextColumn.CellStyle>
                            <Style TargetType="DataGridCell" BasedOn="{StaticResource RightAlignedCellStyle}">
                                <Setter Property="Foreground" Value="{Binding Path=TodaysValueChange, Converter={StaticResource PriceChangeToColor}}"/>
                            </Style>
                        </DataGridTextColumn.CellStyle>
                    </DataGridTextColumn>

进入这个

                    <DataGridTextColumn Header="Today Chg $" Binding="{Binding TodaysValueChange, StringFormat=N2}" IsReadOnly="True" CellStyle="{StaticResource ColoredCell}" ul:ThemeProperties.SignValue="{Binding TodaysValueChange}" ElementStyle="{StaticResource CellRightAlign}"/>

但是,我收到此错误: "'绑定'不能在'DataGridTextColumn'集合中使用。绑定只能在 DependencyObject 的 DependencyProperty 上设置",用于将 TodaysValueChange 绑定到 ul:ThemeProperties.SignValue"。我不知道它在抱怨什么。

这是我的主题属性:

public static class ThemeProperties
{
    public static double GetSignValue(DependencyObject obj)
    {
        return (double)obj.GetValue(SignValueProperty);
    }
    public static void SetSignValue(DependencyObject obj, double value)
    {
        obj.SetValue(SignValueProperty, value);
    }
    public static readonly DependencyProperty SignValueProperty = DependencyProperty.RegisterAttached("SignValue", typeof(double), typeof(ThemeProperties), new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.Inherits));
}

这是我在 App.xaml 中的样式资源:

    <Style x:Key="ColoredCell" TargetType="{x:Type DataGridCell}" BasedOn="{StaticResource {x:Type DataGridCell}}">
        <Setter Property="Foreground" Value="{Binding Path=ul:ThemeProperties.SignValue, Converter={StaticResource PriceChangeToColor}}"/>
    </Style>

我无法重现您的确切问题(我没有看到您提到的错误(,但我可以看到几个问题:

  • DataGrid列不是视觉或逻辑树的一部分,因此它们不会继承DataContext。因此,SignValue属性的绑定没有任何要绑定的内容。
  • 即使该列继承了DataContext,它仍然不起作用,因为该列对DataGrid来说是"全局的",所以它会得到DataGridDataContext,而不是特定行的DataContext
  • ColoredCell样式中设置绑定时,它相对于当前单元格的DataContext,这是一个数据项,未设置SignValue属性。您需要相对于单元格本身进行绑定(RelativeSource=Self(。但是由于上述其他问题,它也无法正常工作...

不幸的是,我认为在这种情况下,我的"参数化样式"技巧没有简单的方法,因为样式中需要更改的是绑定路径,并且没有办法"绑定绑定的路径"。所以我认为你应该坚持你最初的解决方案(这不是那么糟糕的IMO(。

相关内容

  • 没有找到相关文章

最新更新