【发布时间】:2015-04-01 15:52:31
【问题描述】:
我正在为我的应用程序开发自定义用户控件。这个控制非常简单。它只是一个网格,在 [0,0] 中有一个复选框,在 [0,1] 中有一个 TextBlock。在 XAML 中按照我想要的方式设计它没有任何问题。
但是,第二步给我带来了一些麻烦。我试图公开 IsChecked 布尔值?我的子控件是一个复选框,用于绑定到我的主窗体上,与 TextBlock 的 Text 属性相同。
我尝试了几种不同的方法来解决这个问题,但都无济于事。
这是我的通用代码:
public partial class CDCheckBox : UserControl
{
public bool? IsChecked
{
get { return chk.IsChecked; }
set { chk.IsChecked = value; }
}
public string Text
{
get { return lbl.Text; }
set { lbl.Text = value; }
}
public static readonly DependencyProperty IsCheckedProperty =
DependencyProperty.Register(
"IsChecked",
typeof(bool?),
typeof(CDCheckBox),
new PropertyMetadata(default(bool?), OnItemsPropertyChanged));
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register(
"Text",
typeof(string),
typeof(CDCheckBox),
new PropertyMetadata(default(string), OnItemsPropertyChanged));
/*
public event PropertyChangedEventHandler PropertyChanged;
private void OnNotify(string propName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
*/
private static void OnItemsPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
// AutocompleteTextBox source = d as AutocompleteTextBox;
// Do something...
//lbl.Text = e.NewValue.ToString();
}
/*
public event PropertyChangedEventHandler PropertyChanged;
private void OnNotify(string propName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
*/
public CDCheckBox()
{
InitializeComponent();
}
}
当我运行上面的代码时,我没有收到任何错误,但我的绑定数据没有显示在我的 TextBlock 控件中。当我在编写依赖属性之前尝试时,它在我的 XAML 中给出了一个错误,提示“无法在 'CDCheckBox' 类型的 'IsChecked' 属性上设置 'Binding'。只能在 DependencyProperty 上设置'Binding'一个 DependencyObject。”
然而有趣的是,这个错误并没有出现在构造函数中,而是出现在我编写的 window_loaded 方法中。然而,这似乎是一个红鲱鱼,就好像我注释掉该代码一样,它仍然会在表单显示 XAMLParse 错误之前失败。
【问题讨论】:
-
提示:输入
propdp并按两次 TAB 键以生成正确的依赖属性。你的不正确。 -
哦,有趣...谢谢。很高兴知道。
-
@Sypher_04 您是否想过简单地重新设置现有控件的样式,而不是创建一个全新的控件。听起来您只需要一个布尔值(用于复选框)和一个字符串(用于 TextBlock),因此您可以重新设置
CheckBox控件的样式并将其模板更改为包含Grid、内部CheckBox和@ 987654327@。详情请见MSDN。 -
@Steven Rands 我实际上并没有考虑从主窗体中重新设计样式。我的绑定都以这种方式完美地工作。但是,不幸的是,它确实给我带来了一个不同的问题。我已将此添加到我的原始帖子中。
-
更新已删除。我意识到这只是我在与星期一的案件作斗争。当我做了一个调整时,我没有想清楚。现在一切似乎都在工作。感谢您的帮助。 :)
标签: c# wpf xaml binding user-controls