gpt4 book ai didi

c# - 创建基本用户控件

转载 作者:行者123 更新时间:2023-11-30 17:39:51 24 4
gpt4 key购买 nike

我创建了几个具有一些通用属性的用户控件。是否可以创建一个基础用户控件,具体的用户控件可以从中派生?

基类:

public class LabeledControlBase : UserControl {
public string ControlWidth {
get { return (string)GetValue(ControlWidthProperty); }
set { SetValue(ControlWidthProperty, value); }
}

// Using a DependencyProperty as the backing store for ControlWidth. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ControlWidthProperty =
DependencyProperty.Register("ControlWidth", typeof(string), typeof(LabeledControlBase), new PropertyMetadata("Auto"));
}

具体类:

public partial class LabeledTextBox : Base.LabeledControlBase {
public string LabelText {
get { return (string)GetValue(LabelTextProperty); }
set { SetValue(LabelTextProperty, value); }
}
// Using a DependencyProperty as the backing store for LabelText. This enables animation, styling, binding, etc...
public static readonly DependencyProperty LabelTextProperty =
DependencyProperty.Register("LabelText", typeof(string), typeof(LabeledTextBox), new PropertyMetadata(null));

public string TextBoxText {
get { return (string)GetValue(TextBoxTextProperty); }
set { SetValue(TextBoxTextProperty, value); }
}
// Using a DependencyProperty as the backing store for TextBoxText. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TextBoxTextProperty =
DependencyProperty.Register("TextBoxText", typeof(string), typeof(LabeledTextBox), new PropertyMetadata(null));

我想达到的目标:我希望能够在派生自“LabeledControlBase”的任何 UserControl 上设置“ControlWidth”属性。

问题是什么:我意识到它的方式我的 LabeledTextBox 不识别 GetValue 和 SetValue 方法,尽管它继承自从 UserControl 派生的 La​​beledControlBase。将 Base.LabeledControlBase 更改为 UserControl 时一切正常(除了我无法访问我常用的属性)。

最佳答案

因为我还没有看到 LabeledTextBox.xaml 我不能确定,但​​我怀疑你的 XAML 有某种错误——也许使用 UserControl 作为根? XAML 应如下所示:

<wpf:LabeledControlBase
x:Class="WPF.LabeledTextBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:wpf="clr-namespace:WPF"
x:Name="self"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<TextBox Text="{Binding ElementName=self, Path=ControlWidth}" />
</Grid>
</wpf:LabeledControlBase>

...以 LabeledControlBase 作为根。这让我可以在页面中使用 LabeledTextBox 控件:

<wpf:LabeledTextBox ControlWidth="Hi" />

(ControlWidth 的预期语义可能不是我正在用它做的;这只是为了验证事情是否有效。他们确实如此。)

关于c# - 创建基本用户控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35013007/

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