以下是我的问题的有效示例: https://github.com/themimcompany/AttachedPropertyIssue
我有一个Style
的{{1}}定义了一个Button
。在ControlTemplate
内,我有一个ControlTemplate
,它具有相同的附加属性。我想将TextBlock
的附加属性设置/绑定到TextBlock
的附加属性的值。附加属性是一个简单的Button
值。
如何使它正常工作?在UWP中可以这样做吗?我收到的错误并未给我指示如何解决。像int
...
这是我的风格:
Unspecified error
这是我所附的属性定义:
<Style TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<TextBlock local:Translation.TranslationModelID="{Binding Path=(local:Translation.TranslationModelID),
RelativeSource={RelativeSource TemplatedParent}}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
这是我要定义的按钮,请注意,我想分配按钮的附加属性,然后在ControlTemplate中获取值并将其分配给TextBlock的附加属性(看一下样式):>
public class Translation
{
public static int GetTranslationModelID(DependencyObject obj)
{
return (int)obj.GetValue(TranslationModelIDProperty);
}
public static void SetTranslationModelID(DependencyObject obj, int value)
{
obj.SetValue(TranslationModelIDProperty, value);
}
public static readonly DependencyProperty TranslationModelIDProperty =
DependencyProperty.RegisterAttached("TranslationModelID", typeof(int), typeof(FrameworkElement), new PropertyMetadata(0));
}
再次说明:我有一个分配给<Button local:Translation.TranslationModelID="1" />
的附加属性,我想将该Button
的附加属性的值分配给相同的附加属性Button
的{{1}}的{{1}}中TextBlock
的属性。它没有按我预期的那样工作。我在运行时遇到ControlTemplate
异常。我该如何工作?
以下是我的问题的有效示例: https://github.com/themimcompany/AttachedPropertyIssue
编辑:
这种方法给我一个不同的错误。 Button
Style
答案 0 :(得分:0)
我想使用TemplateBinding或常规绑定将模板化父级的附加属性分配给ControlTemplate内部元素的附加属性
根据您的要求,您可以创建继承按钮的模板控件。然后在后面的代码中设置TextBlock Attached属性。请检查以下细分代码。
date
Xaml
public sealed class CustomButton : Button, IDisposable
{
private long token;
private TextBlock Tbk;
public CustomButton()
{
this.DefaultStyleKey = typeof(CustomButton);
}
private void CallBackMethod(DependencyObject sender, DependencyProperty dp)
{
UpdateAttachedPropertyValue();
}
protected override void OnApplyTemplate()
{
base.OnApplyTemplate();
token = this.RegisterPropertyChangedCallback(AttachedPropertyTest.Translation.TranslationModelIDProperty, CallBackMethod);
Tbk = GetTemplateChild("TBK") as TextBlock;
UpdateAttachedPropertyValue();
}
public void Dispose()
{
this.UnregisterPropertyChangedCallback(AttachedPropertyTest.Translation.TranslationModelIDProperty,token);
}
private void UpdateAttachedPropertyValue()
{
AttachedPropertyTest.Translation.SetTranslationModelID(Tbk, AttachedPropertyTest.Translation.GetTranslationModelID(this));
}
}