Nano Hash - криптовалюты, майнинг, программирование

Размещение всплывающего окна Wpf

Есть ли шанс разместить всплывающее окно рядом с элементом из ListBox? Я использую MVVM, список привязан к элементам, и для некоторых выбранных элементов я хочу показывать всплывающее окно рядом с элементом.

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

Я пробовал что-то вроде этого (это не работает):

    <Popup  IsOpen="{Binding Path=ShowPopup}" PlacementTarget="{Binding ElementName=List1, Path=SelectedItem}" Placement="Center">
        <TextBox Background="Red" Height="120" Text="Aaaaaa FUUUUUUUUUUUUU....."></TextBox>
    </Popup>

Я не хочу использовать код позади, только xaml

18.10.2010

Ответы:


1

Это поместит всплывающее окно справа от выбранного ListBoxItem.

альтернативный текст

Пример

<Window.Resources>
    <SolidColorBrush x:Key="SelectedBackgroundBrush" Color="#DDD" />
    <SolidColorBrush x:Key="DisabledForegroundBrush" Color="#888" />

    <ControlTemplate x:Key="PopupListBoxItemTemplate" TargetType="ListBoxItem">
        <Border Name="Border" Padding="2" SnapsToDevicePixels="true">
            <Grid>
                <Popup Name="c_popup" PlacementTarget="{Binding RelativeSource={RelativeSource TemplatedParent}}" Placement="Right" >
                    <Border BorderBrush="Black" BorderThickness="1" CornerRadius="2.5">
                        <TextBlock Background="Wheat" Foreground="Black" Text="Aaaaaa FUUUUUUUUUUUUU....."/>
                    </Border>
                </Popup>
                <ContentPresenter />
            </Grid>
        </Border>
        <ControlTemplate.Triggers>
            <Trigger Property="IsSelected" Value="true">
                <Setter TargetName="Border" Property="Background" Value="{StaticResource SelectedBackgroundBrush}"/>
                <Setter TargetName="c_popup" Property="IsOpen" Value="True"/>
            </Trigger>
            <Trigger Property="IsEnabled" Value="false">
                <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>
</Window.Resources>
<Grid>
    <ListBox Name="listBox"
             ItemsSource="{Binding Source={x:Static Fonts.SystemFontFamilies}}">
        <ListBox.ItemContainerStyle>
            <Style TargetType="{x:Type ListBoxItem}">
                <Setter Property="Template" Value="{StaticResource PopupListBoxItemTemplate}" />
            </Style>
        </ListBox.ItemContainerStyle>
    </ListBox>
</Grid>
25.10.2010
  • Отличное решение, но я нашел небольшую ошибку. Чтобы это заработало, мне пришлось изменить Setter с {StaticResource ListBoxItemTemplate} на StaticResource PopupListBoxItemTemplate}. 29.10.2017

  • 2

    Причина, по которой ваш пример не работает, заключается в том, что вы привязываете цель размещения к объекту, отличному от пользовательского интерфейса.

    PlacementTarget="{Binding ElementName=List1, Path=SelectedItem}"
    

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

    Что вам нужно, так это установить PlacementTarget в ItemContainer (Доктор WPF объясняет), и это невозможно без помощи "некоторых" кодов.

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

    19.10.2010

    3

    Поскольку вы хотите показывать всплывающее окно при нажатии на элемент, будет ли это работать для вас:

    <Popup  IsOpen="{Binding Path=ShowPopup}" Placement="Mouse">
         <TextBox Background="Red" Height="120" Text="Aaaaaa FUUUUUUUUUUUUU....."></TextBox>
     </Popup>
    
    18.10.2010
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..