#silverlight #xaml
#silverlight #xaml
Вопрос:
У меня есть элемент управления datagrid, в котором некоторые столбцы содержат текст, переполняющий соответствующие контейнеры.
Чтобы решить эту проблему, я добавляю всплывающую подсказку в controltemplate для datagridcell, затем привязываю содержимое всплывающей подсказки к содержимому данных с помощью templatebinding к свойству 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 Позиция: 0]
в MS.Internal.XcpImports.MethodEx(IntPtr ptr, имя строки, CValue[] cvData)
в MS.Internal.XcpImports.MethodEx(DependencyObject obj, строковое имя)
в MS.Internal.XcpImports.FrameworkElement_ApplyTemplate(FrameworkElement FrameworkElement)
в системе.Windows.Элементы управления.Управление.ApplyTemplate()
в системе.Windows.Элементы управления.Всплывающая подсказка.openPopup()
в системе.Windows.Элементы управления.Всплывающая подсказка.OnIsOpenChanged (логическое значение isOpen)
в системе.Windows.Элементы управления.Всплывающая подсказка.OnIsOpenPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
в системе.Windows.DependencyObject.RaisePropertyChangeNotifications (DependencyProperty dp, старое значение объекта, новое значение объекта)
в системе.Windows.DependencyObject.updateffectivevalue(свойство DependencyProperty, EffectiveValueEntry oldEntry, EffectiveValueEntry amp; newEntry, операция ValueOperation)
в системе.Windows.DependencyObject.SetValueInternal(DependencyProperty dp, значение объекта, логическое значение allowReadOnlySet)
в системе.Windows.DependencyObject.setValue(свойство DependencyProperty, логическое значение b)
в системе.Windows.Элементы управления.ToolTipService.OpenAutomaticToolTip (отправитель объекта, EventArgs e)
в MS.Internal.CoreInvokeHandler.InvokeEventHandler (Int32 typeIndex, Delegate handlerDelegate, отправитель объекта, аргументы объекта)
в MS.Internal.JoltHelper.fireEvent (IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName)
*
Это явление меня озадачивает, потому что я думаю, что синтаксис xaml кажется правильным, и во время процессов сборки и загрузки не сообщается об ошибках. Похоже, что элемент управления всплывающей подсказки пытается применить шаблон при его появлении, но я думаю, что это должно быть сделано в то же время, когда был применен шаблон элемента управления datagridcell. У кого-нибудь есть идеи по этому поводу?
Ответ №1:
Попробуйте это:
<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>
Комментарии:
1. Спасибо за ответ. Я попробовал ваш метод, но, к сожалению, не сработал. Тип установщика не поддерживает прямое сопоставление, поэтому xaml не компилировался.
2. Да, я забыл, что вы спрашивали о Silverlight, а не о WPF.
3. Очень сожалею о тебе, Эйяфьятлайокудль. Я не заметил вашего запроса.
4. Я попробовал ваш метод, но, к сожалению, у меня он не сработал. В моей оригинальной программе старая ошибка все еще остается. И в моей другой экспериментальной программе при наведении курсора на ячейки вся сетка данных просто исчезает. И я должен извиниться за то, что не ответил вам быстро, и большое спасибо за ваш ответ.