在鼠标点击和选择上启用ListboxItem

时间:2017-05-27 10:46:26

标签: c# wpf

我有一个Listbox,Image,TextBox,TextBlock绑定到ObservableCollection。

我想要实现的是那些ListboxItems可以由用户编辑,就像Windows资源管理器样式一样。

选择ListboxItem - MouseClick一次 - ENABLE Textbox。我有一个适用于isEnabled属性的MultiDatatrigger。但我不希望它在第一次点击项目时触发。用户首先需要选择一个,然后再次单击。

  <ListBox x:Name="Listbox1" Margin="0,12,0,5" HorizontalContentAlignment="Left" VerticalContentAlignment="Top" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto">
                <ListBox.ItemsPanel>
                    <ItemsPanelTemplate>
                        <VirtualizingStackPanel IsItemsHost="True" Orientation="Vertical"/>
                    </ItemsPanelTemplate>
                </ListBox.ItemsPanel>

                <ListBox.ItemTemplate>
                    <DataTemplate>                            
                        <StackPanel Orientation="Horizontal">
                            <Image x:Name="ListBoxImage" Source="{Binding FileIcon}" Height="30" Width="30"/>
                            <StackPanel VerticalAlignment="Center" Orientation="Vertical" Width="150">
                            <TextBox BorderThickness="0" FontSize="11" IsEnabled="False" x:Name="ListBoxFileName" TextWrapping="Wrap" Text="{Binding FileName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="7,0,0,0">
                                        <TextBox.Style>
                                            <Style TargetType="TextBox">                                                   
                                                <Setter Property="Background" Value="Transparent"/>
                                                <Setter Property="VerticalContentAlignment" Value="Center"/>
                                                <Setter Property="BorderBrush" Value="Black"/>
                                                <Setter Property="Template">
                                                    <Setter.Value>
                                                        <ControlTemplate TargetType="TextBox">
                                                            <Border Name="Bd" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true">
                                                                <ScrollViewer Name="PART_ContentHost" Background="{TemplateBinding Background}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                                                            </Border>
                                                            <ControlTemplate.Triggers>
                                                                <Trigger Property="IsEnabled" Value="False">
                                                                    <Setter Value="{StaticResource DisabledBackgroundBrush}" Property="Background" />
                                                                    <Setter Value="{StaticResource DisabledForegroundBrush}" Property="Foreground" />
                                                                    <Setter TargetName="PART_ContentHost" Property="Background" Value="Transparent"/>
                                                                </Trigger>
                                                                <Trigger Property="IsEnabled" Value="True">
                                                                    <Setter Value="{StaticResource DisabledBackgroundBrush}" Property="Background" />
                                                                    <Setter Value="{StaticResource DisabledForegroundBrush}" Property="Foreground" />
                                                                    <Setter TargetName="PART_ContentHost" Property="Background" Value="White"/>
                                                                    <Setter Property="Height" Value="25"></Setter>
                                                                </Trigger>
                                                                <Trigger Property="IsKeyboardFocusWithin" Value="True">
                                                                    <Setter Value="False" Property="IsEnabled" />
                                                                </Trigger>

                                                            </ControlTemplate.Triggers>
                                                        </ControlTemplate>
                                                    </Setter.Value>
                                                </Setter>
                                            </Style>                                                
                                        </TextBox.Style>
                                    </TextBox>
                            </StackPanel>
                            <StackPanel VerticalAlignment="Center" Orientation="Vertical" Width="70">
                                <TextBlock x:Name="ListBoxFileCreation" FontSize="11" TextWrapping="Wrap" Text="{Binding FileCreation, StringFormat='dd.MM.yyyy'}" Margin="10,0,5,0" />
                            </StackPanel>
                        </StackPanel>

                        <DataTemplate.Triggers>
                            <MultiDataTrigger>
                                <MultiDataTrigger.Conditions>
                                    <Condition Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=IsSelected}" Value="True"/>
                                    <Condition Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=IsClicked}" Value="True"/>
                                </MultiDataTrigger.Conditions>
                                <Setter TargetName="ListBoxFileName" Property="IsEnabled" Value="true"/>
                            </MultiDataTrigger>
                        </DataTemplate.Triggers>                           




                    </DataTemplate>
                </ListBox.ItemTemplate>   

                <ListBox.ItemContainerStyle>
                    <Style TargetType="ListBoxItem">
                        <Setter Property="Padding" Value="3,5,3,5"/>
                        <!--<EventSetter Event="MouseDown" Handler="ListBoxItem_MouseDown"/>-->
                    </Style>
                </ListBox.ItemContainerStyle>
            </ListBox>

这是我到目前为止所拥有的。提前谢谢。

0 个答案:

没有答案