WedX - журнал о программировании и компьютерных науках

Двойной щелчок мыши по элементу списка работает только с текстом, а не со всей строкой

Мой ListBox использует этот DataTemplate для работы с LeftDoubleClick:

<UserControl x:Class="X1.XPrep.GuiModuleJobSelection.Views.ContentJobSelectionView"
         xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="https://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="https://schemas.microsoft.com/expression/blend/2008"
         xmlns:l="https://wpflocalizeextension.codeplex.com"
         xmlns:Classes="clr-namespace:X1.XPrep.GuiModuleJobSelection.Models"
         xmlns:ViewModels="clr-namespace:X1.XPrep.GuiModuleJobSelection.ViewModels"
         l:LocalizeDictionary.DesignCulture="en"
         l:ResxLocalizationProvider.DefaultAssembly="XPrep.GuiModuleJobSelection"
         l:ResxLocalizationProvider.DefaultDictionary="Resources"

         x:Name="jobSelectionContent"
         mc:Ignorable="d" 
         d:DataContext="{d:DesignInstance {x:Type ViewModels:ContentJobSelectionViewModel}, IsDesignTimeCreatable=True}"
         d:DesignHeight="600" d:DesignWidth="328.5">
<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/XPrep.GuiCommon;component/Resources/Styles.xaml"/>
        </ResourceDictionary.MergedDictionaries>

        <DataTemplate x:Key="ListboxJobDataTemplate" DataType="{x:Type Classes:JobForJobSelectionViewModel}">
            <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="{Binding JobData.JobName}" 
                       VerticalAlignment="Top">
                <TextBlock.ToolTip>
                    <StackPanel Height="200" MinWidth="200">
                        <StackPanel Width="200" Orientation="Vertical" >
                            <TextBlock Text="{Binding JobData.JobName}" FontWeight="Bold"/>
                            <Image VerticalAlignment="Top" Source="{Binding PreviewImageSource}" Margin="0,10,0,0"/>
                            <TextBlock Text="No preview image available." Margin="0,10,0,0">
                                <TextBlock.Style>
                                    <Style TargetType="{x:Type TextBlock}">
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding Path=IsPreviewImageMissing}" Value="False">
                                                <Setter Property="Visibility" Value="Hidden"/>
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </TextBlock.Style>
                            </TextBlock>
                            <TextBlock Text="{Binding JobData.Comment}"/>
                        </StackPanel>
                    </StackPanel>
                </TextBlock.ToolTip>
                <TextBlock.InputBindings>
                    <MouseBinding Gesture="LeftDoubleClick"
                        Command="{Binding Path=DataContext.LoadCommand, 
                        RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type UserControl}}}"/>
                </TextBlock.InputBindings>
            </TextBlock>
        </DataTemplate>
    </ResourceDictionary>
</UserControl.Resources>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>
    <ListBox ItemsSource="{Binding Jobs, Mode=TwoWay}" IsSynchronizedWithCurrentItem="True" 
             SelectedItem="{Binding SelectedJob, Mode=TwoWay}" ItemTemplate="{DynamicResource ListboxJobDataTemplate}"
             Grid.Column="1" Grid.Row="0" x:Name="listBoxJobNames" MinWidth="200"                 
             HorizontalAlignment="Stretch"  Margin="6" VerticalAlignment="Stretch">
        <ListBox.InputBindings>
            <KeyBinding Key="Delete" Command="{Binding Path=DataContext.DeleteCommand, 
                        RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type UserControl}}}"/>
        </ListBox.InputBindings>
    </ListBox>
    <StackPanel Grid.Column="0" Grid.Row="0" Margin="0" Width="100" Background="{DynamicResource ContextBackgroundBrush}">
        <Button x:Name="jobSelectionNewButton" Content="{DynamicResource X1.Job.New}" ToolTip="{l:Loc JobSelection_Button_New}"
                HorizontalAlignment="Left" Margin="6" VerticalAlignment="Top" Command="{Binding NewCommand}" IsDefault="True"
                Style="{StaticResource GlossyButtonX1}"/>
        <Button Content="{DynamicResource X1.Job.Load}" ToolTip="{l:Loc JobSelection_Button_Load}" 
                HorizontalAlignment="Left" Margin="6" VerticalAlignment="Top"
                Style="{StaticResource GlossyButtonX1}" 
                Command="{Binding LoadCommand}"/>
        <Button Content="{DynamicResource X1.Job.Rename}" ToolTip="{l:Loc JobSelection_Button_Rename}" 
                HorizontalAlignment="Left" Margin="6" VerticalAlignment="Top" 
                Style="{StaticResource GlossyButtonX1}" 
                Command="{Binding RenameCommand}"/>
        <Button Content="{DynamicResource X1.Job.Clone}" ToolTip="{l:Loc JobSelection_Button_Clone}" 
                HorizontalAlignment="Left" Margin="6" VerticalAlignment="Top" 
                Style="{StaticResource GlossyButtonX1}" 
                Command="{Binding CloneCommand}"/>
        <Button Content="{DynamicResource X1.Common.Delete}" ToolTip="{l:Loc JobSelection_Button_Delete}" 
                HorizontalAlignment="Left" Margin="6" VerticalAlignment="Top"
                Style="{StaticResource GlossyButtonX1}" 
                Command="{Binding DeleteCommand}"/>
    </StackPanel>
</Grid>

The double click only works on the actual text in the items line. What can I do, to let the double click also work on the empty spaces to the right of my item text?

С уважением Райнер

07.07.2015

Ответы:


1

Установите ListBoxItems' HorizontalContentAlignment = Stretch.

Например:

<Style TargetType="{x:Type ListBoxItem}">
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>

В случае, если приведенный выше код не работает, также попробуйте установить Background из Grid на Transparent (если вы используете Grid):

<Grid Background="Transparent">

ИЗМЕНИТЬ:

Привяжите TextBlock Width к ListBoxItem Width, как показано ниже, чтобы решить проблему:

<TextBlock  HorizontalAlignment="Left" 
            TextWrapping="Wrap" 
            Text="{Binding JobData.JobName}" 
            VerticalAlignment="Top"
            Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=ActualWidth}">
07.07.2015
  • Пробовал оба, Стиль фона сетки. Проблема все еще существует. 07.07.2015
  • @Rainer - привяжите ширину TextBlock к ширине ListBoxItem, как показано в моем отредактированном ответе. 07.07.2015
  • Я экспериментировал с этим некоторое время. Сначала я подумал, что может сработать, но потом понял, что у меня странные побочные эффекты в моем приложении... слишком сложно объяснить... Я думаю, причина в бесконечной рекурсии... Не стал бы устанавливать для TextBox значение Ancestor. ActualWidth заставит предка перенастроить его с помощью -> заставить TextBox перенастроить .... и так далее? 08.07.2015
  • Я добился довольно неплохого результата, установив TextBox.MinWidth. Это своего рода обходной путь, который на самом деле не решает реальной проблемы, но раздражение пользователя теперь намного меньше. 08.07.2015
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]