我想要一个额外的WPF控件,它会向TextBox类添加int
属性。我试过Project>添加新项>自定义控件(WPF)。这给了我一个新的控件的新cs文件。我尝试让这个新类继承TextBox
类,然后在public int number { get; set; }
内添加static CustomTextBox()
,但显然这不是正确的语法。
我需要的TextBox
是在代码中动态创建的,而不是在XAML中。
以下是我尝试实施John Gardner的答案:
public static readonly DependencyProperty Number = DependencyProperty.RegisterAttached(
"number",
typeof(TextBox),
typeof(int),
new PropertyMetadata(false)
);
public static void SetNumber(UIElement element, TextBox value)
{
element.SetValue(Number, value);
}
public static TextBox GetNumber(UIElement element)
{
return (TextBox)element.GetValue(Number);
}
我在MainWindow类中添加了这个。它似乎没有为我的TextBox
提供额外的Number属性。
答案 0 :(得分:1)
你需要一个新控件吗?您可能最好使用附加属性。然后根本没有新的控制。
http://msdn.microsoft.com/en-us/library/cc265152(v=VS.95).aspx
<强>更新强> 附加属性不会直接向文本框添加属性,您可以像
一样访问它YourClass.SetNumber( textbox, value );
int value = YourClass.GetNumber( textbox );
或在xaml中,
<TextBox YourClass.Number="1"/>
你的属性在其字符串定义中也应该是“Number”,你有“数字”。你的Get / Set调用应该有一个int值,而不是一个文本框。
答案 1 :(得分:1)
您可以创建TextBox的子类并向其添加单个int属性。应该这样做我猜。
看一下这段代码,看一下如何做的例子:
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
panel.Children.Add(new MyTextBox { Number = 123 });
panel.Children.Add(new MyTextBox { Number = 321 });
panel.Children.Add(new MyTextBox { Number = 456 });
panel.Children.Add(new MyTextBox { Number = 654 });
}
private void click(object sender, RoutedEventArgs e)
{
var myTextBoxes = panel.Children.OfType<MyTextBox>();
var numbers = string.Empty;
myTextBoxes.ToList().ForEach(p => numbers += p.Number + Environment.NewLine);
MessageBox.Show(numbers);
}
}
//Subclass of TextBox that just adds one property
public class MyTextBox : TextBox
{
public int Number { get; set; }
}
..而XAML只有面板和一个按钮:
<StackPanel Name="panel">
<Button Content="Show numbers" Click="click" />
</StackPanel>