在扩展ComboBox的自定义控件中,TemplateBinding无法用于SelectedItem。

4
我们创建了一个自定义的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的绑定不起作用。通过在Google上搜索,我在此处找到了解决方法。具体来说,将SelectedItem绑定更改为 SelectedItem="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=SelectedItem}" 可以使其按预期工作。
为什么原始的SelectedItem的TemplateBinding无法工作,而ItemsSource的TemplateBinding却没问题呢?
1个回答

7

其中一个区别(我认为是您的主要问题)是TemplateBinding始终是单向的,而Binding选择是单向还是双向取决于属性。(更多详细信息在此处。)

您可以在此讨论中找到其他不同之处。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接