Я - только две недели в WPF, таким образом, это - вероятно, тривиальный вопрос. У меня есть набор "CellList", который имеет несколько свойств, которые я хотел бы связать с a ToolTip
таким образом, когда я нависаю над информацией о маркировке от текущего экземпляра CellList
отображен. Как я делаю это? Я понимаю простую привязку и это, возможно, простая привязка также, но я не могу перенести голову вокруг этого. Ниже мой XAML для маркировки. Мог кто-то объяснять мне, как я могу выполнить это.
<HierarchicalDataTemplate>
<ListBox ItemsSource="{Binding CellList}">
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content=" " Height="20" Width="15" Background="{Binding Path=ExptNameBkg, Converter={StaticResource ExptNameToBrushConverter}}" BorderBrush="Black" BorderThickness="1" >
</Label>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</HierarchicalDataTemplate>
Спасибо.
Необходимо подключиться к сигналу drag-motion
и изменить поведение по умолчанию, чтобы оно никогда не указывало до/после сброса:
def _drag_motion(self, widget, context, x, y, etime):
drag_info = widget.get_dest_row_at_pos(x, y)
if not drag_info:
return False
path, pos = drag_info
if pos == gtk.TREE_VIEW_DROP_BEFORE:
widget.set_drag_dest_row(path, gtk.TREE_VIEW_DROP_INTO_OR_BEFORE)
elif pos == gtk.TREE_VIEW_DROP_AFTER:
widget.set_drag_dest_row(path, gtk.TREE_VIEW_DROP_INTO_OR_AFTER)
context.drag_status(context.suggested_action, etime)
return True
-121--4460204- Я только что понял, почему у меня было так много проблем - в MATLAB нельзя хранить строки разной длины как массив с помощью Квадратные скобки объединяют строки различной длины в один массив символов .
>> a=['matlab','is','fun']
a =
matlabisfun
>> size(a)
ans =
1 11
В символьном массиве каждый символ в строке считается одним элементом, что объясняет, почему размер 1X11.
Для хранения строк различной длины в качестве элементов массива необходимо использовать фигурные скобки для сохранения в виде массива ячеек. В массивах ячеек каждая строка обрабатывается как отдельный элемент независимо от длины.
>> a={'matlab','is','fun'}
a =
'matlab' 'is' 'fun'
>> size(a)
ans =
1 3
-121--2774024- <Label Content={Binding Path=Id} ToolTip={Binding Path=Name}/>
просто попробуйте это
Вот kaxaml - уже пример, который включает всплывающую подсказку, которая немного сложнее, чем просто текст:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<XmlDataProvider x:Key="CharacterData">
<x:XData>
<Data xmlns="">
<Character First="Bart" Last="Simpson" Background="LightGreen" />
<Character First="Homer" Last="Simpson" Background="LightBlue" />
<Character First="Lisa" Last="Simpson" Background="Pink" />
<Character First="Maggie" Last="Simpson" Background="Yellow" />
<Character First="Marge" Last="Simpson" Background="PapayaWhip" />
</Data>
</x:XData>
</XmlDataProvider>
<ToolTip x:Key="ElaborateToolTip">
<Grid Margin="5">
<Rectangle RadiusX="6" RadiusY="6" Fill="{Binding XPath=@Background}" />
<StackPanel Orientation="Horizontal" Margin="10">
<TextBlock Text="{Binding XPath=@First}" Margin="0,0,6,0" />
<TextBlock Text="{Binding XPath=@Last}" />
</StackPanel>
</Grid>
</ToolTip>
</Page.Resources>
<ListBox ItemsSource="{Binding Source={StaticResource CharacterData}, XPath=Data/Character}">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="ToolTip" Value="{StaticResource ElaborateToolTip}" />
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding XPath=@First}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Page>
Сложность ToolTip
заключается в том, что ToolTip
- это объект, который вы связываете с элементом управления, а не часть его визуального дерева. Таким образом, вы не можете заполнить его так, как вы заполняли бы элементы в визуальном дереве, например:
<TextBox.ToolTip>
<StackPanel>
...put bound controls here
</StackPanel>
</TextBox.ToolTip>
Вместо этого вам нужно создать конкретный экземпляр всплывающей подсказки и назначить ему стиль, который устанавливает его DataContext
(очень важно; именно так вы можете привязаться к свойствам источника данных его «целевого объекта размещения», то есть элемента управления, отображающего всплывающую подсказку) и его шаблона
. Затем поместите в шаблон визуальное дерево ToolTip
, включая привязки. Наконец, обратитесь к ToolTip
в вашем элементе управления.
Итак, вот TextBox
, Binding
которого выполняет проверку:
<TextBox ToolTip="{StaticResource ErrorToolTip}">
<TextBox.Text>
<Binding Source="SourceProperty">
<Binding.ValidationRules>
<DataErrorValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Он использует эту ToolTip
:
<ToolTip x:Key="ErrorToolTip" Style="{StaticResource ErrorToolTipStyle}"/>
И ToolTip
] использует этот стиль, который получает свое содержимое из свойства ValidationError
источника привязки TextBox
:
<Style x:Key="ErrorToolTipStyle" TargetType="{x:Type ToolTip}">
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="HasDropShadow" Value="True"/>
<Setter Property="DataContext" Value="{Binding Path=PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToolTip">
<Border
Name="Border"
BorderThickness="1"
BorderBrush="LightGray">
<StackPanel Orientation="Vertical">
<Label Background="Firebrick" Foreground="White" FontWeight="Bold" Margin="4">Validation error</Label>
<TextBlock Margin="10" Text="{Binding ValidationError}"/>
</StackPanel>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="HasDropShadow" Value="true">
<Setter TargetName="Border" Property="CornerRadius" Value="4"/>
<Setter TargetName="Border" Property="SnapsToDevicePixels" Value="true"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Я не уверен в этом, но думаю, что единственный часть вышеперечисленного, которая фактически должна быть установлена в стиле, - это DataTrigger
, устанавливающий DataContext
; Я думаю, что почти все остальное можно просто явно установить в визуальном дереве ToolTip
. Но я, наверное, не думаю о чем-то важном.