Как привязать таблицу данных к всплывающей подсказке, чтобы отобразить ее на холсте с прямоугольными элементами? - PullRequest
0 голосов
/ 22 октября 2019

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

Вроде как:

Что этот код выглядит для работы:

<Canvas Name="canvasceldas_phas" Width="350" HorizontalAlignment="Center" VerticalAlignment="Center" Height="350">
         <Canvas.Resources>
                 <Style TargetType="Rectangle">
                     <Setter Property="ToolTip" Value="20" />
                 </Style>
         </Canvas.Resources>
</Canvas>

(В основном всплывающая подсказка с "20" на нем)

Но то, что я хочу, - это то, что появляется знак «20», я хочу, чтобы значение предварительно загруженной таблицы данных, отображаемой в подсказке прямоугольника, принадлежало той же позиции, что и таблица данных, например, яНаведите курсор на прямоугольник (0,1), я хочу, чтобы элемент (0,1) таблицы данных отображался во всплывающей подсказке. (Я не знаю, объясняю ли я себя ясно)

Я пробовал это, но, похоже, не работает

      <Canvas Name="canvasceldas_phas" Width="350" HorizontalAlignment="Center" VerticalAlignment="Center" Height="350">
            <Canvas.Resources>
                <Style TargetType="Rectangle">
                    <Setter Property="ToolTip" Value="{Binding datatable}" />
                </Style>
            </Canvas.Resources>
        </Canvas>

Извините, если это может показаться обвиусом, или я делаюглупые ошибки, но я новичок в wpf, и это сводит меня с ума. Есть идеи? Заранее спасибо:)

1 Ответ

0 голосов
/ 22 октября 2019

Добро пожаловать в WPF и переполнение стека. Мое решение использует инструменты / методы, с которыми вы, возможно, не знакомы, в зависимости от того, насколько вы зелены, но они являются очень важными частями WPF, поэтому вы должны изучить их, если вы их еще не знаете.

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

. Взгляните на следующий код:

<ItemsControl Width="500" Height="500">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Border Height="50" Width="50" BorderThickness="5" BorderBrush="Black" ToolTip="{Binding SomeProperty}"/>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel IsItemsHost="True"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

Каждый элемент выше ItemsControlбудет отображаться как Border элемент управления. Все Border будут размещены внутри WrapPanel. Если бы у вас было 100 предметов, это привело бы к сетке, соответствующей изображению, которое вы предоставили. DataContext каждого Border будет элементом, который он представляет, поэтому любые привязки будут извлекать данные из этого элемента.

Моим решением было бы использовать ItemsControl каквыше, и заполните его данными из вашей "таблицы данных", где каждое значение из таблицы представляет собой один элемент в ItemsControl. Затем вы можете связать Boder.ToolTip со свойством того элемента, который вы хотите отобразить.

Дайте мне знать, если вам нужно больше разъяснений.

...