Tag: 附加属性

绑定附属物

我正在尝试将Button的ContentTemplate绑定到附加属性。 我读了所有问题的答案,类似于“绑定到附属物”,但我没有运气解决问题。 请注意,此处提供的示例是我的问题的一个愚蠢版本,以避免混淆业务代码的问题。 所以,我确实有附加属性的静态类: using System.Windows; namespace AttachedPropertyTest { public static class Extender { public static readonly DependencyProperty AttachedTextProperty = DependencyProperty.RegisterAttached( “AttachedText”, typeof(string), typeof(DependencyObject), new PropertyMetadata(string.Empty)); public static void SetAttachedText(DependencyObject obj, string value) { obj.SetValue(AttachedTextProperty, value); } public static string GetAttachedText(DependencyObject obj) { return (string)obj.GetValue(AttachedTextProperty); } } } 和一个窗口: 这就是它。 我希望在按钮中间看到“附加”。 相反,它崩溃: 属性路径无效。 ‘Extender’没有名为’AttachedText’的公共属性。 我在SetAttachedText和GetAttachedText上设置断点,并执行SetAttachedText,因此将其附加到按钮可以正常工作。 […]

如何将附加行为添加到CollectionViewSource?

我正在尝试向CollectionViewSource添加附加行为,以便我可以在XAML中的视图模型上提供filterPredicate属性。 XAML如下所示: 但是,我收到一个错误: A ‘Binding’ cannot be set on the ‘SetItemFilter’ property of type ‘CollectionViewSource’. A ‘Binding’ can only be set on a DependencyProperty of a DependencyObject. CollectionViewSource似乎是DependencyObject。 我不确定我做错了什么。 以下是行为代码: public static class CollectionViewSourceItemFilter { /// /// Gets the property value. /// public static Predicate GetItemFilter(CollectionViewSource collectionViewSource) { return (Predicate)collectionViewSource.GetValue(ItemFilter); } /// /// Sets the […]

WPF:在附加属性中,如何等到可视树正确加载?

我在WPF应用程序中有一个附加属性。 下面的代码在OnLoad事件中,但它不起作用,除非我添加一个hacky 500毫秒延迟。 有没有办法避免这种延迟,并检测可视树何时加载? private static void FrameworkElement_Loaded(object sender, RoutedEventArgs e) { // … snip… Window window = GetParentWindow(dependencyObject); // Without this delay, changing properties does nothing. Task task = Task.Run( async () => { { // Without this delay, changing properties does nothing. await Task.Delay(TimeSpan.FromMilliseconds(500)); Application.Current.Dispatcher.Invoke( () => { // Set False >> True […]

创建AttachedProperty以保存滚动条标记的位置

我为DataGrid创建了一个略微自定义的垂直滚动条。 在其中我添加了一个ItemsControl来保存所选项目的位置。 到目前为止,这是一个带有硬编码标记的模型。 下面是我自定义的垂直滚动条模板,其中ItemsControl放置有硬编码标记值。 30 70 120 170 我接下来要做的是创建一个AttachedProperty来保持标记位置并将其绑定回ItemsControl。 我真的不明白的是: – 这个附加属性Type应该是什么,int的ObservableCollection? – 由于这是DataGrid中所选项目总数的指南,标记的位置是否需要以某种方式缩放? – 我有一个捕获DataGrid.SelectionChanged的附加行为,但是如果主集合发生变化,那么它似乎不是一个事件呢? [编辑] 直接绑定到DataGrids SelectedItems。 (但是当选择某些内容时,ItemsControl顶部会出现闪烁) – 删除或注释掉SelectionChanged行为。 – 将ItemSource更改为: ItemsSource=”{Binding ElementName=GenericDataGrid, Path=SelectedItems}” – 将Multibinding更改为: – 最后转换为: public class MarkerPositionConverter: IMultiValueConverter { //Performs the index to translate conversion public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) { //calculated the […]

减少MVVM WPF应用程序中的样板代码以获取附加的属性,命令等?

我正在研究WPF MVVM应用程序。 我注意到的是,我必须编写大量的样板代码来声明命令(通过WPF Team的MVVM Toolkit中的DelegateCommands),附加属性和附加行为。 有没有可用的策略来减少我必须编写的样板代码的数量? 谢谢!

Silverlight中附加和非附加依赖属性的区别

好的Stackers,我在这个问题上花了好几个小时,我想知道是否有人有明确的答案。 对于我所做的所有研究,我找不到Silverlight中的 .Register和.RegisterAttached之间的任何区别。 现在,在你跳枪并告诉我.RegisterAttached用于将DP附加到另一个类之前,尝试使用DependencyProperty.Register()实现一个附加的依赖属性。 我发现没有一个区别,所以我不知道有什么区别。 此外,在我的具体情况下,我试图扩展Grid类的function,并希望给它一些额外的属性。 因此,我尝试列出将typeof(Grid)和typeof(FluidLayoutManager) (实现类)作为ownerType参数传递,它似乎也没有什么区别……(我相信它确实有所作为,当我从同一名称空间传递两个自定义类。但是当传递Microsoft定义的类与自定义类时,我总是将它作为自定义类的DP显示在XAML中。) 关于这个主题的任何澄清将非常感激,因为我坐在这里挠挠脑袋,想知道是否有任何差异,或者微软是否只是再次与我搞砸了。

如何在WPF中处理Canvas.Top更改事件?

我在Canvas使用附加属性Canvas.Top和Canvas.Left定位了一个元素。 然后使用动画将元素移动到不同的坐标集,如下所示: DoubleAnimation left = new DoubleAnimation( oldLeft, newLeft ); DoubleAnimation top = new DoubleAnimation( oldTop, newTop ); element.BeginAnimation( Canvas.LeftProperty, left ); element.BeginAnimation( Canvas.TopProperty, top ); 有没有办法在Canvas.Top或Canvas.Left被更改时接收事件? 优选地与动画无关。

附属物业变更事件?

如果附加属性发生变化,有没有办法获得变更通知? 一个简单的例子是一个带有Rectangle的Canvas 。 使用DepenendyProperties Canvas.Top和Canvas.Left设置Rectange的位置。 我正在使用Adorner通过更改Canvas.Top和Canvas.Left来移动Rectangle。 下一步是在两个Rectangles之间创建一个箭头。 为了跟踪移动的Rectangles ,只要Rectangle的位置发生变化,箭头就必须获得更改通知。 如果我可以在附加属性Canvas.Top更改时获得更改通知,这将很容易。 谢谢你的帮助,迈克尔

使用附带事件与caliburn micro Message.Attach

我正在尝试使用caliburn micro消息来触发我创建的附加事件: public static class DataChanging { public delegate void DataChangingEventHandler(object sender, DataChangingEventArgs e); public static readonly RoutedEvent ChangingEvent = EventManager.RegisterRoutedEvent(“Changing”, RoutingStrategy.Bubble, typeof(DataChangingEventHandler), typeof(DataChanging)); public static void AddChangingHandler(DependencyObject o, DataChangingEventHandler handler) { ((UIElement)o).AddHandler(DataChanging.ChangingEvent, handler); } public static void RemoveChangingHandler(DependencyObject o, DataChangingEventHandler handler) { ((UIElement)o).RemoveHandler(DataChanging.ChangingEvent, handler); } public static bool GetActivationMode(DependencyObject obj) { return (bool)obj.GetValue(ActivationModeProperty); } […]