C# TemplateBinding不适用于自定义控件扩展组合框中的SelectedItem
我们创建了一个自定义ComboBox控件,该控件有一个按钮用于清除ComboBox的选择:C# TemplateBinding不适用于自定义控件扩展组合框中的SelectedItem,c#,wpf,binding,templatebinding,C#,Wpf,Binding,Templatebinding,我们创建了一个自定义ComboBox控件,该控件有一个按钮用于清除ComboBox的选择: <Style TargetType="{x:Type local:ClearableComboBox}"> <Setter Property="SelectedItem" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate
<Style TargetType="{x:Type local:ClearableComboBox}">
<Setter Property="SelectedItem" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:ClearableComboBox}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<DockPanel>
<Button Name="btnClear" DockPanel.Dock="Right" ToolTip="Clear" Width="20">
<Image Source="pack://application:,,,/img/icons/silk/cross.png" Stretch="None" />
</Button>
<ComboBox Name="comboBox"
ItemsSource="{TemplateBinding ItemsSource}"
SelectedItem="{TemplateBinding SelectedItem}"
DisplayMemberPath="{TemplateBinding DisplayMemberPath}" />
</DockPanel>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
ItemsSource的绑定可以正常工作,但是SelectedItem的绑定不能正常工作。在谷歌上搜索之后,我找到了这个问题的解决方案。具体来说,将SelectedItem绑定更改为
SelectedItem=“{Binding RelativeSource={RelativeSource TemplatedParent},Path=SelectedItem}”
使其按预期工作
为什么SelectedItem上的原始TemplateBinding不起作用,而ItemsSource的TemplateBinding却工作得很好?其中一个区别(我认为这是您案例中的主要问题)是TemplateBinding
总是单向的,而绑定
选择为单向
或双向
。(更多详情。)
您可能会发现其他差异