Подсказка не может привязать шаблон к содержимому из datagridcell - PullRequest
1 голос
/ 30 мая 2011

У меня есть элемент управления сеткой данных, в котором некоторые столбцы содержат текст, переполняющий соответствующие контейнеры.

Чтобы решить эту проблему, я добавляю всплывающую подсказку в шаблон управления для datagridcell, затем привязать содержимое всплывающей подсказки к содержимому данных, привязав шаблон к свойству Content.

Код Xaml, приведенный ниже, выглядит следующим образом:

      <Style x:Key="RotatedCell" TargetType="sdk:DataGridCell">
        <Setter Property="Template">
          <Setter.Value>
            <ControlTemplate TargetType="sdk:DataGridCell">
              <ContentPresenter
                Content="{TemplateBinding Content}"
                ContentTemplate="{TemplateBinding ContentTemplate}" >
                <ToolTipService.ToolTip>
                  <ToolTip Content="{TemplateBinding Content}"/>
                </ToolTipService.ToolTip>
              </ContentPresenter>
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </Style>

Сетка данных может отображаться с данными, отображаемыми успешно, но когда курсор находится над сообщается об ошибке столбца: * Ошибка выполнения Microsoft JScript: необработанная ошибка в приложении Silverlight [Строка: 0 Position: 0]
в MS.Internal.XcpImports.MethodEx (IntPtr ptr, имя строки, CValue [] cvData)
в MS.Internal.XcpImports.MethodEx (объект DependencyObject, имя строки)
в MS.Internal.XcpImports.FrameworkElement_ApplyTemplate (FrameworkElement frameworkElement)
в System.Windows.Controls.Control.ApplyTemplate ()
at System.Windows.Controls.ToolTip.OpenPopup ()
at System.Windows.Controls.ToolTip.OnIsOpenChanged (Boolean isOpen)
в System.Windows.Controls.ToolTip.OnIsOpenPropertyChanged (DependencyObject d, DependencyPropertyChangedEventArgs e)
в System.Windows.DependencyObject.RaisePropertyChangeNotifications (DependencyProperty dp, объект oldValue, объект newValue)
в System.Windows.DependencyObject.UpdateEffectiveValue (свойство DependencyProperty, EffectiveValueEntry oldEntry, EffectiveValueEntry & newEntry, операция ValueOperation)
в System.Windows.DependencyObject.SetValueInternal (DependencyProperty dp, значение объекта, логическое значение allowReadOnlySet)
в System.Windows.DependencyObject.SetValue (свойство DependencyProperty, логическое значение b)
в System.Windows.Controls.ToolTipService.OpenAutomaticToolTip (Отправитель объекта, EventArgs e)
в MS.Internal.CoreInvokeHandler.InvokeEventHandler (Int32 typeIndex, делегат handlerDelegate, отправитель объекта, аргументы объекта)
в MS.Internal.JoltHelper.FireEvent (IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName)

*

Это явление озадачивает меня, потому что я думаю, что синтаксис xaml кажется правильным и об ошибках не сообщается во время процессов сборки и загрузки. Похоже, что элемент управления всплывающей подсказки пытается применить шаблон, когда собирается показываться, но я думаю, что это должно быть сделано в то же время, когда был применен шаблон элемента управления datagridcell. У кого-нибудь есть идеи по этому поводу?

1 Ответ

0 голосов
/ 30 мая 2011

Попробуйте:

<Setter Property="ToolTip" Value={Binding Content} />

ОБНОВЛЕНИЕ: Да, я забыл, что вы спрашивали о Silverlight, а не о WPF.Это будет хорошо работать, я проверил:

<Style x:Key="DataGridCellStyle"
           TargetType="sdk:DataGridCell">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="sdk:DataGridCell">
                    <Grid x:Name="Root"
                          Background="{TemplateBinding Background}">
                        <ToolTipService.ToolTip>
                            <ContentControl Content="{TemplateBinding Content}" />
                        </ToolTipService.ToolTip>
                        <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}"
                                          Content="{TemplateBinding Content}"
                                          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                          Margin="{TemplateBinding Padding}"
                                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...