代码之家  ›  专栏  ›  技术社区  ›  Jensen

自定义组合框控件在其他自定义组合框控件内,如何绑定项?

  •  0
  • Jensen  · 技术社区  · 15 年前

    我创建了两个自定义 ComboBox 控件,都从默认值继承 组合框 控制:

    public BlueComboBox : ComboBox {}
    public WhiteComboBox : ComboBox {}
    

    BlueComboBox 包含一个模板,样式正确,工作正常。 WhiteComboBox 有点复杂。它包含一个由 TextBlock 和A 蓝盒子 .

    不正确的代码段,但您应该得到以下想法:

    <ControlTemplate>
      <Grid>
        <TextBlock />
        <BlueComboBox />
      </Grid>
    </ControlTemplate>
    

    这是最棘手的部分:因为 白盒 是一个 组合框 控件我要将项绑定到 蓝盒子 到我的 白盒 控制。

    <WhiteComboBox>
      <ComboBoxItem Content="Foo" />
      <ComboBoxItem Content="Bar" />
    </WhiteComboBox>
    

    我尝试绑定的项源 蓝盒子 模板中使用的实体 ItemsSource 我的财产 白盒 但这似乎不起作用:

    <ControlTemplate>
      <Grid>
        <TextBlock />
        <BlueComboBox ItemsSource="{TemplateBinding ItemsSource}" />
      </Grid>
    </ControlTemplate>
    

    使用我定义的项目的正确方法是什么? 白盒 实例到 蓝盒子 实例?我在使用吗? 项目源 属性不正确,还是应该使用其他属性?

    任何帮助都将不胜感激。

    2 回复  |  直到 13 年前
        1
  •  0
  •   Samuel Jack    15 年前

    您可以尝试使用RelativeSource绑定:

    <ControlTemplate>
      <Grid>
        <TextBlock />
        <BlueComboBox ItemSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type ComboBox}}}, Path=Items}" />
      </Grid>
    </ControlTemplate>
    

    另外,WPF中的常见做法是使用样式来更改控件的可视方面,而不是创建派生类型。

        2
  •  0
  •   Jensen    15 年前

    我遇到了第二个问题。

    我设置了itemcontainerStyle属性的样式,并设置了SystemColors.HighlightBrushKey值。当我单独使用BlueComboBox时,当我将鼠标悬停在某个项目上时,这将非常有效。但是,当我在新控件中嵌入BlueComboBox时,当我使用itemsource模板绑定时,它将不再工作。当我直接在控件模板中向BlueComboBox项添加一些ComboBox项时,它会再次工作。当我明确地点击一个项目时,它也能工作。

    我尝试在我的WhiteComboBox控件模板上设置itemcontainerStyle属性并将其传递,但我尝试的所有操作似乎都不起作用。

    推荐文章