Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF控件样式设置器属性(根据系列中的项)_C#_Wpf_Xaml_Styles_Infragistics - Fatal编程技术网

C# WPF控件样式设置器属性(根据系列中的项)

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

我目前正在使用WPF和infragistics控件开发一个.NET4.7应用程序

我需要根据数据源列表中的每个元素设置每个元素的
高度、
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”。