gpt4 book ai didi

wpf - 如何通过包含它的对象的接口(interface)公开私有(private)内部对象的依赖属性?

转载 作者:行者123 更新时间:2023-12-04 19:49:15 25 4
gpt4 key购买 nike

我们有一个自定义面板类,它通过内部 DoubleAnimation 对象为其子项设置动画。但是,我们希望将动画的 Duration 依赖属性公开为我们面板的公共(public)属性,以便用户在使用我们的面板时可以在他们的 XAML 中更改它。但是我们不想公开动画对象的任何其他部分,只公开持续时间。

不断有人向我建议的第一件事是使用 PropertyChanged 通知,但这只对 setter 有效,对 getter 无效。我们也不能简单地创建 .NET 属性,因为 XAML 完全绕过了 .NET 属性。

我的一个同事有一个聪明的主意......在外部属性和内部对象的属性之间使用双向数据绑定(bind),这实际上看起来是一个非常巧妙的解决方案。然而,除了数据绑定(bind)之外,是否有另一种/更好的方法来做到这一点...通过包含对象的公共(public)接口(interface)公开内部对象的依赖属性?

更新:

看起来双向数据绑定(bind)是可行的方法。 (感谢@Jeff!)为此,我发现这是设置外部 DP 的最佳方法,因此它是内部对象 DP 的完美匹配——元数据、默认值和所有!然后使用 Jeff 的绑定(bind)技巧就大功告成了!

public Duration Duration {
get { return (Duration)GetValue(DurationProperty); }
set { SetValue(DurationProperty, value); }
}

public static readonly DependencyProperty DurationProperty = DoubleAnimation.DurationProperty.AddOwner(
typeof(SlideContentPanel));

最佳答案

试试这个... 在外部对象上创建等效的依赖属性,然后从内部对象绑定(bind)到外部对象。这将在两个方向上起作用。

Binding durationBinding = new Binding(){
Source = _doubleAnimation,
Path = new PropertyPath("Duration"),
Mode = BindingMode.TwoWay
};
BindingOperations.SetBinding(this, SlideContentPanel.DurationProperty, durationBinding);

对于 xaml 爱好者

<UserControl x:Class=”Controls.DataGrid.DataGrid2"
Name="rootControl">

<Grid>
<xcdg:DataGridControl Grid.Row="0"
Name="internalDataGrid"
SelectedItem="{Binding ElementName=rootControl, Path=SelectedItem}"
EditTriggers="{Binding ElementName=rootControl, Path=EditTriggers}"
/>

关于wpf - 如何通过包含它的对象的接口(interface)公开私有(private)内部对象的依赖属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3894016/

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