Tag: 依赖项属性

C#中的简单依赖属性和UserControl问题

我的最终目标是从UserControl在XAML中的调用中公开我在UserControl中的TextBox的Text值。 将使用TextBox的文本呈现UserControl 。 我一直在使用各种示例工作,但我总是最终得到“在UserControl类型中找不到属性SetCustomText”

设置WPF依赖项属性而不触发事件

我需要在我的代码中的控件(Slider.Value)上设置依赖项属性,而不会触发ValueChanged事件(因为我设置了值,而不是用户)。 在WPF中处理这种情况的最佳方法是什么? 为了澄清,我想要做的是将WPF滑块连接到WinForms用户控件。 目前在我的应用程序中,我有一个ValueChanged事件处理程序,它通过方法调用将滑块值传递给WinForms控件。 WinForms控件(实际上是本机OpenGL窗口的包装器)需要能够根据它的内部计算动态更改滑块。 为此,我使用滑块的抽象(ISlider),我在我的应用程序中实例化该滑块的WPF风格,并通过WinForms用户控件上的.NET属性将句柄传递给WinForms控件。 所有这一切当前都在工作,只是当内部逻辑决定滑块需要更改时,它调用ISlider :: SetPos(),然后更改WPF滑块,然后触发滑块上的ValueChanged事件和处理程序对于该事件,提取滑块的位置并将其传递给WinForms控件,该控件首先发起事件。 ligaz和Alan Le的建议似乎都应该有效,但我不确定我是否会以最好的方式解决这个问题。

属性在DependencyProperty中更改

在上一篇文章中,我询问了如何将属性注册为DependencyProperty。 我得到了答案,它运作正常。 但是现在我想在Click上为这个DependencyProperty添加一些Items。 这不起作用。 我注册DependencyProperty的代码是: public static readonly DependencyProperty ChartEntriesProperty = DependencyProperty.Register( “ChartEntries”, typeof(ObservableCollection), typeof(ChartView), new FrameworkPropertyMetadata(OnChartEntriesChanged)); private static void OnChartEntriesChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { } 在从我的XAML绑定到我的c#-code时,调用OnChartEntriesChanged-Event。 但是如果我之后添加ChartEntry(按下按钮),则不会触发事件。 有谁知道为什么?

XAML绑定不依赖于依赖属性?

我正在尝试(并且失败)在xaml中对依赖项属性进行数据绑定。 当我使用代码后,它工作正常,但不是在xaml中。 用户控件只是绑定到依赖项属性的TextBlock : 而依赖属性是一个简单的字符串: public static readonly DependencyProperty TestProperty = DependencyProperty.Register(“Test”, typeof(string), typeof(MyControl), new PropertyMetadata(“DEFAULT”)); public string Test { get { return (string)GetValue(TestProperty); } set { SetValue(TestProperty, value); } } 我有一个常规属性,在主窗口中通常实现了INotifyPropertyChanged 。 private string _myText = “default”; public string MyText { get { return _myText; } set { _myText = value; NotifyPropertyChanged(); } } […]

依赖属性收到xaml更改时的回调

当我在运行时设置IsClosed的值时, OnIsClosedChanged()被称为罚款。 但是,Designer会设置属性的值,但不会调用OnIsClosedChanged() 。 public static DependencyProperty IsClosedProperty = DependencyProperty.Register(“IsClosed”, typeof(bool), typeof(GroupBox), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender)); public bool IsClosed { get { return (bool)this.GetValue(IsClosedProperty); } set { if ((bool)this.GetValue(IsClosedProperty) == value) return; this.SetValue(IsClosedProperty, value); OnIsClosedChanged(); } } private void OnIsClosedChanged() { _rowDefContent.Height = new GridLength((IsClosed ? 0 : 1), GridUnitType.Star); } 显然,Designer不会修改IsClosedProperty ,只有IsClosedProperty会收到xaml更改。 我的问题是:如何在Designer中修改了值后运行IsClosed 。 或者至少为非运行时更改添加一些逻辑。