C# 如何在SilverLight中为元素创建自己的属性
有人能帮我回答这个问题吗?)在我的XAML中,我有Listbox元素。我想将我的用户属性添加到其中(在我的示例中为-ConnectorStyle) 我的XAML代码:C# 如何在SilverLight中为元素创建自己的属性,c#,asp.net,silverlight,silverlight-4.0,silverlight-3.0,C#,Asp.net,Silverlight,Silverlight 4.0,Silverlight 3.0,有人能帮我回答这个问题吗?)在我的XAML中,我有Listbox元素。我想将我的用户属性添加到其中(在我的示例中为-ConnectorStyle) 我的XAML代码: <ListBox ItemsSource="{Binding Nodes}" ItemsPanel="{StaticResource CanvasItemsPanelTemplate}" ItemTemplate="{StaticResource NodePictureTemplate}"
<ListBox ItemsSource="{Binding Nodes}" ItemsPanel="{StaticResource CanvasItemsPanelTemplate}"
ItemTemplate="{StaticResource NodePictureTemplate}"
ItemContainerStyle="{StaticResource CanvasItemStyle}"
ConnectorStyle="{StaticResource ConnectorLineStyle}"/>
public partial class MainPage : UserControl
{
public static readonly DependencyProperty ConnectorStyleProperty = DependencyProperty.Register(
"ConnectorStyle", typeof(Style), typeof(NodePicture), null);
public MainPage()
{
InitializeComponent();
}
public Style ConnectorStyle
{
get { return (Style)GetValue(ConnectorStyleProperty); }
set { SetValue(ConnectorStyleProperty, value); }
}
}
但我是个错误-无法解析ConnectorStyle。
有没有一种简单(或正确的方法)的方法可以做到这一点?有两种方法可以做到这一点:要么为列表框编写添加DependencyProperty的子类,要么编写附加属性 在您的例子中,您可能需要编写一个子类来添加属性。试着这样做:
public class MyListBox : ListBox
{
public static readonly DependencyProperty ConnectorStyleProperty = DependencyProperty.Register(
"ConnectorStyle", typeof(Style), typeof(MyListBox), null);
public Style ConnectorStyle
{
get { return (Style)GetValue(ConnectorStyleProperty); }
set { SetValue(ConnectorStyleProperty, value); }
}
}
这将添加一种新类型的列表框,您可以将其添加到xaml代码中。它将具有与常规列表框相同的所有属性,但也将具有ConnectorStyle属性
如果您需要响应对列表框中ConnectorStyle属性的更改,那么您应该更改Dependency属性的代码,但这超出了本问题的范围
在XAML中,它应该是:
<local:ListBoxEx
ConnectorStyle="{StaticResource ConnectorLineStyle}"/>
有两种方法可以做到这一点:要么为添加DependencyProperty的列表框编写子类,要么编写附加属性 在您的例子中,您可能需要编写一个子类来添加属性。试着这样做:
public class MyListBox : ListBox
{
public static readonly DependencyProperty ConnectorStyleProperty = DependencyProperty.Register(
"ConnectorStyle", typeof(Style), typeof(MyListBox), null);
public Style ConnectorStyle
{
get { return (Style)GetValue(ConnectorStyleProperty); }
set { SetValue(ConnectorStyleProperty, value); }
}
}
这将添加一种新类型的列表框,您可以将其添加到xaml代码中。它将具有与常规列表框相同的所有属性,但也将具有ConnectorStyle属性
如果您需要响应对列表框中ConnectorStyle属性的更改,那么您应该更改Dependency属性的代码,但这超出了本问题的范围
在XAML中,它应该是:
<local:ListBoxEx
ConnectorStyle="{StaticResource ConnectorLineStyle}"/>
谢谢,@Rune Grimstad,但是您的回答中有一些更新,代码中有一个错误。属性的返回类型不正确。现已修复。谢谢,@Rune Grimstad,但您的回答中有一些更新。代码中有一个错误。属性的返回类型不正确。现在已修复。我认为重要的是,这里显示的代码从技术上讲不是您的模型,而是名为“MainPage”的UserControl类的代码,因此即使是C#代码,这仍然是您的观点。模型(或viewmodel)将是“节点”所在的位置:即绑定到的类。我之所以提到它,是因为这可能有助于澄清为什么您创建的属性在列表框中不可见。我认为重要的一点是,从技术上讲,这里显示的代码不是您的模型,而是名为“MainPage”的UserControl类的代码,所以即使它是C#代码,这仍然是您的观点。模型(或viewmodel)将是“节点”所在的位置:即绑定到的类。我之所以提到它,是因为这可能有助于澄清为什么您创建的属性对列表框不可见。