C# WPF控件样式设置器属性(根据系列中的项)
我目前正在使用WPF和infragistics控件开发一个.NET4.7应用程序 我需要根据数据源列表中的每个元素设置每个元素的C# WPF控件样式设置器属性(根据系列中的项),c#,wpf,xaml,styles,infragistics,C#,Wpf,Xaml,Styles,Infragistics,我目前正在使用WPF和infragistics控件开发一个.NET4.7应用程序 我需要根据数据源列表中的每个元素设置每个元素的、高度、YMemberPath和XMemberPath 我使用了一个图表XamDataChart,它显示了列表中的几个点。ChartData类如下所示: public class ChartData { public double Width { get; set; } public double Height { get; set; } p
、高度、YMemberPath
和XMemberPath
我使用了一个图表XamDataChart
,它显示了列表中的几个点。ChartData
类如下所示:
public class ChartData
{
public double Width { get; set; }
public double Height { get; set; }
public double XPos { get; set; }
public double YPos { get; set; }
}
<ig:XamDataChart.Series>
<ig:ScatterSeries
MarkerType="Square"
ItemsSource="{Binding ChartDataList}"
YMemberPath="YPos"
XMemberPath="XPos"
XAxis="{Binding ElementName=XAxis}"
YAxis="{Binding ElementName=YAxis}">
<ig:ScatterSeries.MarkerStyle>
<Style TargetType="{x:Type ig:Marker}">
<Setter Property="Width" Value="{Binding RelativeSource={RelativeSource Self}, FallbackValue=20}"/>
<Setter Property="Height" Value="{Binding RelativeSource={RelativeSource Self}, FallbackValue=20}"/>
</Style>
</ig:ScatterSeries.MarkerStyle>
</ig:ScatterSeries>
</ig:XamDataChart.Series>
目前,这些值是在my ViewModel的构造函数中设置的:
ChartData data = new ChartData
{
Width = 400,
Height = 200,
XPos = 100,
YPos = 100
};
我的XAML如下所示:
public class ChartData
{
public double Width { get; set; }
public double Height { get; set; }
public double XPos { get; set; }
public double YPos { get; set; }
}
<ig:XamDataChart.Series>
<ig:ScatterSeries
MarkerType="Square"
ItemsSource="{Binding ChartDataList}"
YMemberPath="YPos"
XMemberPath="XPos"
XAxis="{Binding ElementName=XAxis}"
YAxis="{Binding ElementName=YAxis}">
<ig:ScatterSeries.MarkerStyle>
<Style TargetType="{x:Type ig:Marker}">
<Setter Property="Width" Value="{Binding RelativeSource={RelativeSource Self}, FallbackValue=20}"/>
<Setter Property="Height" Value="{Binding RelativeSource={RelativeSource Self}, FallbackValue=20}"/>
</Style>
</ig:ScatterSeries.MarkerStyle>
</ig:ScatterSeries>
</ig:XamDataChart.Series>
不幸的是,我的元素无法正确绘制,我不知道我做错了什么
标记样式部分中的宽度和高度设置器根本不受尊重
你对如何解决这个问题有什么想法吗
我需要在XPos和YPos上以适当的高度和宽度绘制每个元素,不留边距或填充
非常感谢 我认为您需要实现属性更改通知。确定、设置或更改宽度和高度的源值时,需要将此更改通知目标。这将让您知道如何执行此操作:
基本上,当值更改时,需要在每个属性上实现并调用OnPropertyChanged()
编辑1:
我不明白。您使用的是高度和宽度绑定。这意味着您希望在正常操作期间更新这些值。如果这不正确,只需使用硬编码值
此外,您的值没有得到尊重,因为它们是在UI初始化后运行的构造函数中设置的。如果没有更改通知,构造函数中的值将不会得到尊重(这就是为什么在启动时未正确设置这些值的原因)
您可以在其定义中初始化值,例如:
public double Width { get; set; } = 400;
此值在初始化期间应用,并且应在启动期间应用于初始UI布局-但是,在没有更改通知的情况下,此值将成为静态(未更改)值
但是,您需要更正绑定。您的绑定与相对资源有关,但与自身有关。这意味着您正在将控件的宽度绑定到自身。您需要使用ElementName=和实际数据项的路径(例如Path=data.Width)绑定到数据源,这是近似值,因为您的代码不足以理解整个情况。但是,在没有更改通知的情况下,对data.Width的更改也不会更新
编辑2:
您还可以以“传统”方式更新值。也就是说,使用控件名和属性名并在代码中设置值。这样做,绑定将被忽略。谢谢您的回复。INotifyPropertyChanged当然是一个好主意——但不幸的是,这并不是我现在想要的。如果使用静态值,则在应用程序启动时未正确设置这些值。我不知道如何特别设置宽度和高度,因为它在MarkerStyle中。我认为您需要在setters中设置path=“Width”和path=“Height”。