gpt4 book ai didi

c# - WPF 用户控件项未显示

转载 作者:太空宇宙 更新时间:2023-11-03 20:21:12 24 4
gpt4 key购买 nike

我有一个用 wpf 构建的条形图。用户指定栏内的项目。

条形图.xaml.cs

public partial class BarChart : UserControl
{
List<BarItem> BarItems = new List<BarItem>();
List<Bar> Bars = new List<Bar>();
public List<BarItem> Items
{
get { return BarItems; }
set
{
BarItems = value;
Bars.Clear();
int i=0;
this.LayoutRoot.Children.Clear();
//This line should show up but doesn't suggesting that that the property is not being set?
Debug.WriteLine("SET");
foreach(BarItem Item in BarItems){
Bar ThisBar=new Bar();
ThisBar.CurrentLable=Item.Lable;
ThisBar.CurrentValue=Item.Value;
Debug.WriteLine("{0}:{1} at {2}",Item.Lable,Item.Value,(i*55));
ThisBar.CurrentX=i*55;
this.AddChild(ThisBar);
i++;
}
Debug.WriteLine(i);
}
}
public BarChart()
{
this.InitializeComponent();
}
}

条形图.xaml

<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:CipherCracker"
mc:Ignorable="d"
x:Class="CipherCracker.BarChart"
x:Name="BarChartList"
d:DesignWidth="640" d:DesignHeight="480">

<Grid x:Name="LayoutRoot"/>
</UserControl>

BarItem.cs

public class BarItem
{
public int Value
{
get;
set;
}
public string Lable
{
get;
set;
}
public BarItem()
{

}

}

添加您运行的新条形图

<local:BarChart>
<local:BarChart.Items>
<local:BarItem Lable="B" Value="75"/>
<local:BarItem Lable="A" Value="50"/>
</local:BarChart.Items>
</local:BarChart>

然而,根据输出,没有添加任何项目。我做错了什么,还有更好的方法吗?

最佳答案

您的问题是属性 setter 实际上从未被调用。

按照您在 XAML 中所做的方式添加 BarItem 对象,会将项目添加到现有列表实例中。只有在将列表设置为新实例时才会调用属性 setter 。

所以我会在代码隐藏中创建一个新列表,并在那里设置属性。这样做会调用 setter,然后您的代码就会运行。您可能需要为条形图命名,以便您可以引用它。

XAML

<local:BarChart x:Name="bar">
<!-- Doing this adds BarItems to the existing list.
<local:BarChart.Items>
<local:BarItem Lable="B" Value="75"/>
<local:BarItem Lable="A" Value="50"/>
</local:BarChart.Items>
-->
</local:BarChart>

代码隐藏

public MainWindow()
{
InitializeComponent();

//Setting the Items property to a new list, will call the setter..
bar.Items = new List<BarItem>
{
new BarItem { Lable = "Test1", Value = 500 },
new BarItem { Lable = "Test2", Value = 1000 },
new BarItem { Lable = "Test3", Value = 1500 }
};
}

关于c# - WPF 用户控件项未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13403172/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com