是否可以从数据模板绑定到控件的属性?

发布于 2024-11-28 19:21:21 字数 1563 浏览 0 评论 0原文

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

我想做的是在 Windows Phone 7 下重新设置 ListPicker 的样式。

我需要的是

  1. 去掉标题(这很简单,只需定义一个空的 ListPicker.HeaderTemplate 即可)。
  2. 强制选择器在单击时始终进入完整模式(同样简单,只需将 ItemCountThreshold 设置为 1)。
  3. 重新设置在 FullMode 下使用的 itemtemplate 的样式(同样简单,只需定义一个 FullModeItemTemplate)
  4. 将 ListPicker 的“HEADER”属性值合并到 ItemTemplate 中(因为只有一个项目会显示,所以我需要将标题文本“嵌入”在该项目中) 。

就是那个4号,我似乎无法得到。

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

        <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>

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

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

 {TextOfHeader}{Content of selected Item}>

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

有什么想法吗?

Ok, sounds odd, and there's likely a better way, but I haven't seen it yet.

What I'm trying to do is restyle a ListPicker under Windows Phone 7.

What I need is to

  1. get rid of the header (that's easy, just define a null ListPicker.HeaderTemplate).
  2. Force the picker to always go to full mode when clicked (again, easy, just set the ItemCountThreshold to 1).
  3. Restyle the itemtemplate used when in FullMode (again, easy, just define a FullModeItemTemplate)
  4. Incorporate the ListPicker's "HEADER" property value into the ItemTemplate (since only one item will ever show, i need the header text "embedded" within the one item).

It's that number 4 that I can't seem to get.

I've defined a listpicker like so (i'm directly defining the templates inline instead of in resources for now, just to keep things simple).

        <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>

Ignoring all the obvious formatting bits for now, the problem I'm having is that I can't use {TemplateBinding Header} from within a datatemplate. I've used it from a ControlTemplate no problem.

The result of this ItemTemplate should be an item displayed such as

 {TextOfHeader}{Content of selected Item}>

I'm just not sure how to go about getting at a property of the templated control (the listpicker in this case).

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

花期渐远 2024-12-05 19:21:21

利用 RelativeSource

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

Take advantages of RelativeSource:

<TextBlock Text="{Binding Path=Header, RelativeSource={RelativeSource AncestorType={x:Type phonekit:ListPicker}}}" />
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文