自定义依赖属性在具有 TemplatedParent 的 UWP 模板中不起作用
Posted
技术标签:
【中文标题】自定义依赖属性在具有 TemplatedParent 的 UWP 模板中不起作用【英文标题】:Custom dependency property not working in UWP template with TemplatedParent 【发布时间】:2017-02-07 09:37:42 【问题描述】:我有以下数据模板:
<DataTemplate x:Key="ListViewItemTemplate">
<Grid x:Name="grid">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Margin="5"
Foreground="Black"
Text="Binding ActualText"
TextWrapping="WrapWholeWords" />
<my:CustomSelector Grid.Column="1"
ActualValue="Binding Value, Mode=TwoWay,
RelativeSource=RelativeSource TemplatedParent" />
<ComboBox x:Name="cbox"
Grid.Column="2"
Width="90"
Margin="3"
VerticalAlignment="Center"
ItemsSource="StaticResource data"
SelectedIndex="Binding Value,
Mode=TwoWay" />
</Grid>
</DataTemplate>
这是它的代码隐藏文件:
public sealed partial class CustomSelector : StackPanel
public int ActualValue
get return (int)GetValue(ActualValueProperty);
set SetValue(ActualValueProperty, value);
// Using a DependencyProperty as the backing store for ActualValue. This enables animation, styling, binding, etc...
public static readonly DependencyPropertyActualValueProperty =
DependencyProperty.Register("ActualValue", typeof(int), typeof(CustomSelector), new PropertyMetadata(0, (x, y) =>
CustomSelector cc = x as CustomSelector;
int content = (int)y.NewValue;
cc.ActualValue = content;
));
public CustomSelector()
this.InitializeComponent();
DataContext = this;
TextBlock
和 ComboBox
中的绑定工作正常,因此 DataContext 是正确的。
我了解到模板中的自定义绑定只有在 RelativeSource
设置为 TemplatedParent
时才有效。
不幸的是,我的自定义控件的 ActualValue
属性始终设置为默认值(这显然是错误的),当我更改值时,它总是从 0 开始。
对此我还能做些什么?
【问题讨论】:
【参考方案1】:我犯了一个错误并覆盖了我的自定义控件的 DataContext,因此它无法在其上下文中找到 Value
属性。
所以,我删除了以下行:
DataContext = this;
现在它可以按预期工作了。
【讨论】:
以上是关于自定义依赖属性在具有 TemplatedParent 的 UWP 模板中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何定义具有潜在子元素和属性的属性的自定义 web.config 部分?