gpt4 book ai didi

c# - 如何向现有类型/控件添加属性

转载 作者:太空狗 更新时间:2023-10-30 00:25:12 26 4
gpt4 key购买 nike

假设我有一个 TextBox 控件,我想向它添加一个简单的字符串属性,而不必创建一个继承自常规 TextBox 控件的新 Textbox 控件。这可能吗?

例如,像这样的东西:

TextBox tx = new TextBox();
// I want something like the following
// tx.addProperty("propertyname", "properyvalue", typeof(string));

在 WPF/C# 中有这样的东西吗?最简单的方法是什么,而不必创建一个继承自常规 TextBox 控件的新 Textbox 控件?

最佳答案

您可以创建附加的依赖属性,并将其应用于任何类型的控件。例如,对于 TextBlock。下面是我的例子:

XAML

<Grid>
<TextBlock Name="SampleTextBlock" Width="200" Height="30"
Background="AntiqueWhite" Text="Sample TextBlock"
local:MyDependencyClass.MyPropertyForTextBlock="TestString" />

<StackPanel Width="100" Height="100" HorizontalAlignment="Left">
<Button Name="GetValueButton" Content="GetValueButton" Click="GetValue_Click" />
<Button Name="SetValueButton" Content="SetValueButton" Click="SetValue_Click" />
</StackPanel>
</Grid>

代码隐藏

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

private void GetValue_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(MyDependencyClass.GetMyPropertyForTextBlock(SampleTextBlock));
}

private void SetValue_Click(object sender, RoutedEventArgs e)
{
MyDependencyClass.SetMyPropertyForTextBlock(SampleTextBlock, "New Value");

MessageBox.Show(MyDependencyClass.GetMyPropertyForTextBlock(SampleTextBlock));
}
}

public class MyDependencyClass : DependencyObject
{
public static readonly DependencyProperty MyPropertyForTextBlockProperty;

public static void SetMyPropertyForTextBlock(DependencyObject DepObject, string value)
{
DepObject.SetValue(MyPropertyForTextBlockProperty, value);
}

public static string GetMyPropertyForTextBlock(DependencyObject DepObject)
{
return (string)DepObject.GetValue(MyPropertyForTextBlockProperty);
}

static MyDependencyClass()
{
PropertyMetadata MyPropertyMetadata = new PropertyMetadata(string.Empty);

MyPropertyForTextBlockProperty = DependencyProperty.RegisterAttached("MyPropertyForTextBlock",
typeof(string),
typeof(MyDependencyClass),
MyPropertyMetadata);
}
}

或者您可以使用属性 Tag,它只是为了存储附加信息而创建的。但有时,这个属性可能会被其他目标占据,或者可能因为他的名字而无法持有。使用直观的名称创建它们的属性会更好,例如:ValueForAnimationStringIdCanScrolling 等。

关于c# - 如何向现有类型/控件添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18420288/

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