Привязка к преобразователю к элементу управления в шаблоне данных ListBox - PullRequest
2 голосов
/ 28 октября 2011

Я пытаюсь передать TextBlock в конвертер через привязку") не работает, где tbUserName является TextBlock в DockPanel dbInfo.У вас есть идеи, как правильно это связать?

1 Ответ

0 голосов
/ 28 октября 2011

У вас могут быть две проблемы ...

NameScoping ...

У привязки ElementName есть строгие ограничения относительно NameScoping ...

В основном, когда ElementName используется в привязке, NameScope целевого объекта используется для поиска элемента с указанным именем.Если у этого элемента отсутствует NameScope, метод FrameworkElement.FindScope продолжает подниматься по логическому дереву и возвращается к контексту наследования, если логического родителя нет.Область имен - это объект, в котором были зарегистрированы все именованные объекты.

Так что в вашем случае ссылаться на элемент вне контекста всплывающей подсказки не удается.Теперь, чтобы это работало правильно, вам нужно будет преодолеть нарушенную область, используя что-то вроде Tag свойство ...

 <Rectangle Tag="{Binding ElementName tbUserName}" ...>
    <Rectangle.ToolTip>
       <ToolTip ...>
          <ToolTip.Visibility ... >
             <MultiBinding>
                 <Binding Path="Data.Name" />
                 <Binding Path="Tag"
                          RelativeSource="{RelativeSource
                             AncestorType={x:Type Rectangle}}" ...>

Видимость подсказки

вместопривязывая к видимости всплывающей подсказки, вы можете использовать триггер данных с несколькими привязками для самого прямоугольника и установить нужную подсказку, основываясь на значении условия ...

    <Window.Resources>
       <local:TooltipVisibilityConverter x:Key="TooltipVisibilityConverter"/>
       <TextBlock x:Key="MyToolTip" Text="{Binding Data.Name}"/>
     </Window.Resources>

    <!-- Rest of the code --->

    <Rectangle.Style>
        <Style TargetType="{x:Type Rectangle}">
            <Style.Triggers>
                <DataTrigger Value="True">
                    <DataTrigger.Binding>
                          <MultiBinding
                                Converter="{StaticResource
                                   TooltipVisibilityConverter}">
                                <MultiBinding.Bindings>
                                    <Binding Path="Data.Name"/>
                                    <Binding ElementName="HelloTB"/>
                                </MultiBinding.Bindings>
                            </MultiBinding> 
                        </DataTrigger.Binding>
                        <Setter Property="ToolTip"
                                Value="{StaticResource MyToolTip}"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
    </Rectangle.Style>

Обратите внимание, что TooltipVisibilityConverter сейчасдля простоты возвращает логическое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...