0

我想要一个额外的 WPF 控件,它将int向 TextBox 类添加一个属性。我已经尝试过项目 > 添加新项目 > 自定义控件(WPF)。这给了我一个新控件的新 cs 文件。我尝试让这个新类继承TextBox类,然后public int number { get; set; }在里面添加,static CustomTextBox()但显然这不是正确的语法。

我需要的TextBoxs 是在代码中动态创建的,而不是在 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 类中添加了这个。它似乎没有给 my TextBoxs 额外的 Number 属性。

4

2 回答 2

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"/>

您的属性在其字符串定义中也应该是“数字”,您有“数字”。你的 Get/Set 调用应该有一个 int 值,而不是一个文本框。

于 2012-12-11T18:07:24.150 回答
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>
于 2012-12-11T22:04:26.303 回答