WPF datagrid.rowstyle 绑定
Posted
技术标签:
【中文标题】WPF datagrid.rowstyle 绑定【英文标题】:WPF datagrid.rowstyle binding 【发布时间】:2015-09-25 21:09:24 【问题描述】:我遇到了一个已知错误
System.Windows.Data 错误:2:找不到目标元素的管理 FrameworkElement 或 FrameworkContentElement。BindingExpression:Path=Percent;数据项=空;目标元素是 'GradientStop' (HashCode=81530);目标属性是“偏移”(类型“双”)
关于这部分代码:
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="Binding State" Value="Started">
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush EndPoint="1,0" StartPoint="0,0">
<GradientStop Color="Green" Offset="0" />
<GradientStop Color="#FF2D2D30" Offset="Binding Percent" />
</LinearGradientBrush>
</Setter.Value>
</Setter>
</DataTrigger>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
我尝试将DataContext
设置为代理,但没有成功:
<DataGrid.Resources>
<app:BindingProxy x:Key="proxy" Data="Binding" />
</DataGrid.Resources>
[...]
<GradientStop Color="#FF2D2D30" Offset="Binding Data.Percent, Source=StaticResource proxyRow" />
System.Windows.Data 错误:40:BindingExpression 路径错误:在“对象”“ViewModel”(HashCode=37637549)上找不到“百分比”属性。 BindingExpression:路径=数据.百分比; DataItem='BindingProxy' (HashCode=3342738);目标元素是 'GradientStop' (HashCode=64874797);目标属性是“偏移”(类型“双”)
这很明显,因为 Data 现在包含我的 ViewModel 控件的 DataContext。
有什么建议吗?谢谢!
【问题讨论】:
【参考方案1】:正如其他帖子中所建议的,我认为它不适用于我的问题,但使用转换器非常适合!以下是一些参考资料:
Binding GradientStop works but reports error
How to bind GradientStop Colours or GradientStops Property in Silverlight?
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
Model.ListParameters parameters = (Model.ListParameters)value;
if(parameters !=null)
var start = new GradientStop();
start.Color = Colors.Green;
start.Offset = 0;
var stop = new GradientStop();
stop.Color = (Color)ColorConverter.ConvertFromString("#FF2D2D30");
stop.Offset = parameters .Percent;
var result = new LinearGradientBrush();
result.StartPoint = new Point(0, 0);
result.EndPoint = new Point(1, 0);
result.GradientStops.Add(start);
result.GradientStops.Add(stop);
return result;
return null;
还有 XAML
<UserControl.Resources>
<app:GradientProgressConverter x:Key="GradientProgressConverter" />
</UserControl.Resources>
<DataGrid>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="Binding State" Value="Started">
<Setter Property="Background" Value="Binding Converter=StaticResource GradientProgressConverter" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
</<DataGrid>
【讨论】:
以上是关于WPF datagrid.rowstyle 绑定的主要内容,如果未能解决你的问题,请参考以下文章
DataGrid RowStyle - DataTrigger 中的绑定值