TemplateBinding不适用于自定义控件扩展组合框中的SelectedItem
本文关键字:SelectedItem 组合 扩展 不适用 适用于 自定义控件 TemplateBinding | 更新日期: 2023-09-27 18:14:34
我们已经创建了一个自定义的ComboBox控件,它有一个按钮来清除ComboBox的选择:
<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}"
使其按预期工作。
为什么原来的TemplateBinding不能在SelectedItem上工作,而TemplateBinding在ItemsSource上工作得很好?
其中一个差异(其中,我认为,是您的主要问题)是TemplateBinding
始终是OneWay
,而Binding
根据属性选择为OneWay
或TwoWay
。(更多细节在这里)