是否可以从datatemplate绑定到控件的属性?

时间:2011-08-10 04:20:52

标签: silverlight windows-phone-7 datatemplate listpicker

好的,听起来很奇怪,而且可能有更好的方法,但我还没有看到它。

我要做的是在Windows Phone 7下重新安装ListPicker。

我需要的是

  1. 摆脱标题(这很简单,只需定义一个空ListPicker.HeaderTemplate)。
  2. 强制选择器在单击时始终进入完全模式(再次,简单,只需将ItemCountThreshold设置为1)。
  3. 重新设计在FullMode中使用的itemtemplate(再次,简单,只需定义一个FullModeItemTemplate)
  4. 将ListPicker的“HEADER”属性值合并到ItemTemplate中(因为只显示一个项目,我需要在一个项目中“嵌入”标题文本)。
  5. 这是我无法得到的第4号。

    我已经定义了一个像这样的listpicker(我现在直接定义内联模板而不是资源,只是为了简单起见)。

            <phonekit:ListPicker Header="Header Text" x:Name="ListOfSounds" 
                                 SelectedItem="{Binding Path=DepartureChime, Mode=TwoWay, Converter={StaticResource EnumDescriptionToStringConverter}}"  
                                 ItemCountThreshold="1">
                <phonekit:ListPicker.ItemTemplate>
                    <DataTemplate>
                         <StackPanel Orientation="Horizontal" Background="Transparent">
                             <TextBlock Text="{TemplateBinding Header}" />
                             <TextBlock Text="{Binding}" />
                             <TextBlock Text=">" />
                         </StackPanel>
                    </DataTemplate>
                </phonekit:ListPicker.ItemTemplate>
    

    暂时忽略所有明显的格式化位,我遇到的问题是我无法在datatemplate中使用{TemplateBinding Header}。我从ControlTemplate使用它没问题。

    此ItemTemplate的结果应该是显示的项目,例如

     {TextOfHeader}{Content of selected Item}>
    

    我只是不确定如何获取模板化控件的属性(在本例中为listpicker)。

    有什么想法吗?

1 个答案:

答案 0 :(得分:0)

利用RelativeSource

<TextBlock Text="{Binding Path=Header, RelativeSource={RelativeSource AncestorType={x:Type phonekit:ListPicker}}}" />