我有一个名为Section的CustomControl。 Section是可折叠的,因此其ControlTemplate包含Expander。 Expanders IsExpanded-Property通过TemplateBinding绑定到Section的IsExpanded属性。
在某个部分上设置IsExpanded时,Expander会崩溃,但在Expander中使用toggleButton似乎会破坏该绑定。可能通过将本地值设置为Expander的IsExpanded-Property。无论如何,在通过Mouse更改Expander状态后,绑定中断并设置Section的IsExpanded不会执行任何操作。
但是,当将Expander放入视图并将其IsExpanded-Property绑定到视图中的某个DP时,不会发生这种情况。
同样不值得:Snoop在Expander的IsExpanded-Property上没有显示任何绑定。它只显示Value-Source是ParentTemplate。一旦我单击ToggleButton更改IsExpanded,Value-Source就会更改为Local(可能会破坏以前的Binding?)
Section.cs:
public class Section : Control
{
static Section()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(Section), new FrameworkPropertyMetadata(typeof(Section)));
}
public static readonly DependencyProperty IsExpandedProperty = DependencyProperty.Register(
"IsExpanded", typeof (bool), typeof (Section), new PropertyMetadata(default(bool)));
public bool IsExpanded
{
get { return (bool) GetValue(IsExpandedProperty); }
set { SetValue(IsExpandedProperty, value); }
}
}
Generic.xaml风格:
<Style TargetType="{x:Type local:Section}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:Section}">
<Expander Header="Test" IsExpanded="{TemplateBinding IsExpanded}" >
<Rectangle Fill="Aqua" Height="200" Width="200" />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
有什么想法吗?
答案 0 :(得分:0)
所以我找到的答案实际上是非常基本的知识:
无论MetaData声明什么,TemplateBindings始终是ONEWAY ...
使用:
IsExpanded="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsExpanded}"
解决了我的问题...