Как связать со свойством SelectedItem в ControlTemplate? - PullRequest
2 голосов
/ 21 апреля 2009

Рассмотрим следующий элемент управления / шаблон

<my:ExpandingListBox Margin="0,2,0,0" x:Name="TagSearchListBox">
    <my:ExpandingListBox.Template>
        <ControlTemplate TargetType="{x:Type my:ExpandingListBox}">
            <Border Name="MyBorder" BorderThickness="2" BorderBrush="Black">
                <Grid>
                    <TextBlock Name="MySelectionInfo" Background="White" Text="{TemplateBinding SelectedItem}"/>
                    <ScrollViewer Name="MyScrollViewer" HorizontalScrollBarVisibility="Hidden" Opacity="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" VerticalScrollBarVisibility="Hidden">
                        <ItemsPresenter Name="MyItemsPresenter"/>
                    </ScrollViewer>
                </Grid>
            </Border>
        </ControlTemplate>
    </my:ExpandingListBox.Template>
</my:ExpandingListBox>

В основном, существуют дополнительные триггеры / ресурсы, которые заставляют элемент управления раскрываться / сворачиваться, когда IsMouseOver имеет значение true. Когда элемент управления свернут, я бы хотел, чтобы TextBlock "MySelectionInfo" отображал текст выбранного элемента; когда он развернется, я бы хотел, чтобы список элементов отображался как обычно. Есть ли способ получить текст выбранного элемента и отобразить его в TextBlock в чистом XAML?

Setting Text = "{TemplateBinding SelectedItem}" выполняется, но ничего не отображается.

РЕДАКТИРОВАТЬ (решение):

<TextBlock Name="MySelectionInfo" Background="White">
    <TextBlock.Text>
        <Binding Path="SelectedItem.Name">
            <Binding.RelativeSource>
                <RelativeSource Mode="FindAncestor" AncestorType="{x:Type my:ExpandingListBox}"/>
            </Binding.RelativeSource>
        </Binding>
    </TextBlock.Text>
</TextBlock>

". Name" - это известное свойство типа отображаемого элемента.

1 Ответ

2 голосов
/ 21 апреля 2009

Будет ли работать привязка с использованием RelativeSource? Может быть, что-то вроде этого:

<TextBlock Name="MySelectionInfo" Background="White"
    Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type my:ExpandingListBox}}}" />
...